<!DOCTYPE html>












  


<html class="theme-next gemini use-motion" lang="zh-CN">
<head><meta name="generator" content="Hexo 3.8.0">
  <meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">




  
  
    
    
  <script src="/blog/lib/pace/pace.min.js?v=1.0.2"></script>
  <link rel="stylesheet" href="/blog/lib/pace/pace-theme-minimal.min.css?v=1.0.2">





















<link rel="stylesheet" href="/blog/lib/font-awesome/css/font-awesome.min.css?v=4.6.2">

<link rel="stylesheet" href="/blog/css/main.css?v=7.1.0">


  <link rel="apple-touch-icon" sizes="180x180" href="/blog/images/apple-touch-icon-next.png?v=7.1.0">


  <link rel="icon" type="image/png" sizes="32x32" href="/blog/images/favicon-32x32-next.png?v=7.1.0">


  <link rel="icon" type="image/png" sizes="16x16" href="/blog/images/favicon-16x16-next.png?v=7.1.0">


  <link rel="mask-icon" href="/blog/images/logo.svg?v=7.1.0" color="#222">







<script id="hexo.configurations">
  var NexT = window.NexT || {};
  var CONFIG = {
    root: '/blog/',
    scheme: 'Gemini',
    version: '7.1.0',
    sidebar: {"position":"left","display":"post","offset":12,"onmobile":false,"dimmer":false},
    back2top: true,
    back2top_sidebar: false,
    fancybox: false,
    fastclick: false,
    lazyload: false,
    tabs: true,
    motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
    algolia: {
      applicationID: '',
      apiKey: '',
      indexName: '',
      hits: {"per_page":10},
      labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
    }
  };
</script>


  




  <meta name="description" content="备战 2019年5月11号 的软考。具体科目为中级的软件设计师。每天都会更新，直到我看完视频。">
<meta name="keywords" content="软件设计师">
<meta property="og:type" content="article">
<meta property="og:title" content="中级软件设计师 备考笔记（持续更新）">
<meta property="og:url" content="http://zwd596257180.gitee.io/2019/04/20/soft_exam/index.html">
<meta property="og:site_name" content="东Ge博客">
<meta property="og:description" content="备战 2019年5月11号 的软考。具体科目为中级的软件设计师。每天都会更新，直到我看完视频。">
<meta property="og:locale" content="zh-CN">
<meta property="og:image" content="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/d8baa90a6de7cefds.jpg">
<meta property="og:updated_time" content="2019-05-13T02:29:55.615Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="中级软件设计师 备考笔记（持续更新）">
<meta name="twitter:description" content="备战 2019年5月11号 的软考。具体科目为中级的软件设计师。每天都会更新，直到我看完视频。">
<meta name="twitter:image" content="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/d8baa90a6de7cefds.jpg">



  <link rel="alternate" href="/blog/atom.xml" title="东Ge博客" type="application/atom+xml">



  
  
  <link rel="canonical" href="http://zwd596257180.gitee.io/2019/04/20/soft_exam/">



<script id="page.configurations">
  CONFIG.page = {
    sidebar: "",
  };
</script>

  <title>中级软件设计师 备考笔记（持续更新） | 东Ge博客</title>
  












  <noscript>
  <style>
  .use-motion .motion-element,
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-title { opacity: initial; }

  .use-motion .logo,
  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage" lang="zh-CN">

  
  
    
  

  <div class="container sidebar-position-left page-post-detail">
    <div class="headband"></div>
    <a href="https://github.com/yyzheng1729" class="github-corner" aria-label="View source on GitHub"><svg width="80" height="80" viewbox="0 0 250 250" style="fill:#151513; color:#fff; position: absolute; top: 0; border: 0; right: 0;" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"/><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"/><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"/></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>

    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-wrapper">
  <div class="site-meta">
    

    <div class="custom-logo-site-title">
      <a href="/blog/" class="brand" rel="start">
        <span class="logo-line-before"><i></i></span>
        <span class="site-title">东Ge博客</span>
        <span class="logo-line-after"><i></i></span>
      </a>
    </div>
    
      
        <p class="site-subtitle">http://zwd596257180.gitee.io</p>
      
    
    
  </div>

  <div class="site-nav-toggle">
    <button aria-label="切换导航栏">
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
    </button>
  </div>
</div>



<nav class="site-nav">
  
    <ul id="menu" class="menu">
      
        
        
        
          
          <li class="menu-item menu-item-home">

    
    
    
      
    

    

    <a href="/blog/" rel="section"><i class="menu-item-icon fa fa-fw fa-home"></i> <br>首页</a>

  </li>
        
        
        
          
          <li class="menu-item menu-item-about">

    
    
    
      
    

    

    <a href="/blog/about/" rel="section"><i class="menu-item-icon fa fa-fw fa-user"></i> <br>关于</a>

  </li>
        
        
        
          
          <li class="menu-item menu-item-tags">

    
    
    
      
    

    

    <a href="/blog/tags/" rel="section"><i class="menu-item-icon fa fa-fw fa-tags"></i> <br>标签</a>

  </li>
        
        
        
          
          <li class="menu-item menu-item-categories">

    
    
    
      
    

    

    <a href="/blog/categories/" rel="section"><i class="menu-item-icon fa fa-fw fa-th"></i> <br>分类</a>

  </li>
        
        
        
          
          <li class="menu-item menu-item-archives">

    
    
    
      
    

    

    <a href="/blog/archives/" rel="section"><i class="menu-item-icon fa fa-fw fa-archive"></i> <br>归档</a>

  </li>

      
      
        <li class="menu-item menu-item-search">
          
            <a href="javascript:;" class="popup-trigger">
          
            
              <i class="menu-item-icon fa fa-search fa-fw"></i> <br>搜索</a>
        </li>
      
    </ul>
  

  

  
    <div class="site-search">
      
  <div class="popup search-popup local-search-popup">
  <div class="local-search-header clearfix">
    <span class="search-icon">
      <i class="fa fa-search"></i>
    </span>
    <span class="popup-btn-close">
      <i class="fa fa-times-circle"></i>
    </span>
    <div class="local-search-input-wrapper">
      <input autocomplete="off" placeholder="搜索..." spellcheck="false" type="text" id="local-search-input">
    </div>
  </div>
  <div id="local-search-result"></div>
</div>



    </div>
  
</nav>



  



</div>
    </header>

    


    <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          
            

          
          <div id="content" class="content">
            

  <div id="posts" class="posts-expand">
    
  

  
  
  

  

  <article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
  
  
  

  

  <div class="post-block">
    <link itemprop="mainEntityOfPage" href="http://zwd596257180.gitee.io/blog/2019/04/20/soft_exam/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="小东">
      <meta itemprop="description" content="欢迎您的到来！">
      <meta itemprop="image" content="https://wx.qlogo.cn/mmopen/vi_32/GqPMLROFPOIvfCs85HKcD1UKwt3zEJOK4yIcJKaSz4lFGTaL8EzBmziczWx9oWbHyAIBcjwAMXviayrzkpYmzzvg/132">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="东Ge博客">
    </span>

    
      <header class="post-header">

      
        <i class="fa fa-thumb-tack"></i>
        <font color="7D26CD">置顶</font>
      

        
        
          <h1 class="post-title" itemprop="name headline">中级软件设计师 备考笔记（持续更新）

              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">

            
            
            

            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">发表于</span>
              

              
                
              

              <time title="创建时间：2019-04-20 00:00:00" itemprop="dateCreated datePublished" datetime="2019-04-20T00:00:00+08:00">2019-04-20</time>
            

            
              

              
                
                <span class="post-meta-divider">|</span>
                

                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                
                  <span class="post-meta-item-text">更新于</span>
                
                <time title="修改时间：2019-05-13 10:29:55" itemprop="dateModified" datetime="2019-05-13T10:29:55+08:00">2019-05-13</time>
              
            
          </span>

          
            <span class="post-category">
            
              <span class="post-meta-divider">|</span>
            
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              
                <span class="post-meta-item-text">分类于</span>
              
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/blog/categories/考试/" itemprop="url" rel="index"><span itemprop="name">考试</span></a></span>

                
                
              
            </span>
          

          
            
            
          

          
          

          

          

          
            <div class="post-description">备战 2019年5月11号 的软考。具体科目为中级的软件设计师。每天都会更新，直到我看完视频。</div>
          

        </div>
      </header>
    

    
    
    
    <div class="post-body" itemprop="articleBody">

      
      
        <div class="post-gallery" itemscope itemtype="http://schema.org/ImageGallery">
          
          
            <div class="post-gallery-row">
              <img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/d8baa90a6de7cefds.jpg" itemprop="contentUrl">
            
          

          
          </div>
        </div>
      

      
        <h1 id="数据结构与算法基础"><a href="#数据结构与算法基础" class="headerlink" title="数据结构与算法基础"></a>数据结构与算法基础</h1><h2 id="线性表"><a href="#线性表" class="headerlink" title="线性表"></a>线性表</h2><h3 id="基本数据结构"><a href="#基本数据结构" class="headerlink" title="基本数据结构"></a>基本数据结构</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/00e4d830f1bd8572s.png" alt="Markdown"></p>
<h3 id="顺序表"><a href="#顺序表" class="headerlink" title="顺序表"></a>顺序表</h3><p> 在内存中是顺序存储的。内存划分出来的区域是连续的区块。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/17e1df35816e1258s.png" alt="Markdown"></p>
<h3 id="链表"><a href="#链表" class="headerlink" title="链表"></a>链表</h3><p>在内存中是离散存储的。</p>
<ul>
<li><p>head：头结点</p>
</li>
<li><p>结点：包括数据域和指针域（next 域）</p>
</li>
</ul>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/b6b2ee32c2da4ca2s.png" alt="Markdown"></p>
<h3 id="链表的分类"><a href="#链表的分类" class="headerlink" title="链表的分类"></a>链表的分类</h3><h4 id="单链表"><a href="#单链表" class="headerlink" title="单链表"></a>单链表</h4><p>头结点 head 指向第一个结点的数据域，第一个结点的指针域指向下一个结点的数据域…</p>
<table><tr><td bgcolor="#C0FF3E">注意：单链表的最后一个结点的指针域为空（null）！！！</td></tr></table>

<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/b6b2ee32c2da4ca2s.png" alt="Markdown"></p>
<h4 id="循环链表"><a href="#循环链表" class="headerlink" title="循环链表"></a>循环链表</h4><table><tr><td bgcolor="#C0FF3E">注意：循环表的最后一个结点的指针域不为空，而是指向了头结点！！！</td></tr></table>

<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/56388287dc1ea9f4s.png" alt="Markdown"></p>
<h4 id="双链表"><a href="#双链表" class="headerlink" title="双链表"></a>双链表</h4><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/91b3d8d672af4b9fs.png" alt="Markdown"></p>
<h3 id="链表的操作"><a href="#链表的操作" class="headerlink" title="链表的操作"></a>链表的操作</h3><h4 id="单链表的结点删除"><a href="#单链表的结点删除" class="headerlink" title="单链表的结点删除"></a>单链表的结点删除</h4><blockquote>
<p>需求：删除 a2 结点</p>
<p>具体操作：将要删除的结点（a2）的前一个结点（a1）的 next 域指向 a2 的后一个的结点（a3）的数据域，然后释放（free）掉 a2 即可。</p>
</blockquote>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/5e8bb04b9bd90840s.png" alt="Markdown"></p>
<h4 id="单链表的结点插入"><a href="#单链表的结点插入" class="headerlink" title="单链表的结点插入"></a>单链表的结点插入</h4><blockquote>
<p>需求：在 a1 结点后面插入一个新的结点 x</p>
<p>具体操作：将 a1 的 next 域指向 x 的数据域，将 x 的 next 域指向 a2 的数据域即可。</p>
</blockquote>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/f89ec043c17bf169s.png" alt="Markdown"></p>
<h3 id="顺序表与链表的比较"><a href="#顺序表与链表的比较" class="headerlink" title="顺序表与链表的比较"></a>顺序表与链表的比较</h3><table>
<thead>
<tr>
<th style="text-align:left">性能类别</th>
<th>具体项目</th>
<th>顺序存储</th>
<th>链式存储</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">空间性能</td>
<td>存储密度</td>
<td>=1，更优</td>
<td>&lt; 1</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td>容量分配</td>
<td>事先确定</td>
<td>动态改变，更优</td>
</tr>
<tr>
<td style="text-align:left">时间性能</td>
<td>查找运算</td>
<td>O（n/2）</td>
<td>O(n/2)</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td>读运算</td>
<td>O（1）</td>
<td>O（[n+1]/2），最好情况为1，最坏情况为n</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td>插入运算</td>
<td>O（n/2）最好情况为0，最为情况为 n</td>
<td>O（1），更优</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td>删除运算</td>
<td>O（[n-1]/2）</td>
<td>O（1），更优</td>
</tr>
</tbody>
</table>
<h3 id="栈"><a href="#栈" class="headerlink" title="栈"></a>栈</h3><ul>
<li>思想：先进后出</li>
</ul>
<h3 id="队列"><a href="#队列" class="headerlink" title="队列"></a>队列</h3><h4 id="线性队列"><a href="#线性队列" class="headerlink" title="线性队列"></a>线性队列</h4><ul>
<li>思想：先进先出</li>
</ul>
<h4 id="循环队列"><a href="#循环队列" class="headerlink" title="循环队列"></a>循环队列</h4><blockquote>
<p>head：头指针（队头）</p>
<p>tail：尾指针（队尾）</p>
</blockquote>
<ul>
<li><p>当队列中没有存入值的时候，head 指针和 tail 指针指向同一个元素，并且该元素的值是空的！！！</p>
</li>
<li><p>当循环队列开始存入值时，head 指针是不动的，tail 指针是后移一个位置。</p>
</li>
</ul>
<table><tr><td bgcolor="#C0FF3E">注意：<br>循环队列中为了能够区别队空和队满，牺牲了队列的最后一个空间。<br><font color="red">判空条件：head = tail</font><br><font color="red">判满条件：head = tail+1</font></td></tr></table>

<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/a872440e76b56fb8s.png" alt="Markdown"></p>
<h2 id="树和二叉树"><a href="#树和二叉树" class="headerlink" title="树和二叉树"></a>树和二叉树</h2><h3 id="树的一些基本概念"><a href="#树的一些基本概念" class="headerlink" title="树的一些基本概念"></a>树的一些基本概念</h3><p>（结合下面的图进行解释）</p>
<ol>
<li>结点的度：结点1与下一层的3个结点相关联，所以结点1的度为3。</li>
<li>树的度：所有结点度当中，度数最高的一个，所以如图树的度为3。</li>
<li>叶子结点：度为 0 的结点。</li>
<li>分支结点：除了叶子节点外，其它都属于分支结点。</li>
<li>内部结点：除了根节点和叶子结点外，其它都属于内部结点。</li>
<li>父结点</li>
<li>子结点</li>
<li>兄弟结点</li>
<li>层次：如图所示。</li>
</ol>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/765566988c902b8bs.png" alt="Markdown"></p>
<h3 id="树的遍历"><a href="#树的遍历" class="headerlink" title="树的遍历"></a>树的遍历</h3><h4 id="前序遍历"><a href="#前序遍历" class="headerlink" title="前序遍历"></a>前序遍历</h4><blockquote>
<p>访问顺序：先访问根节点再访问子结点。</p>
<p>如上图的前序遍历为：1，2，5，6，7，3，4，8，9，10</p>
</blockquote>
<h4 id="后序遍历"><a href="#后序遍历" class="headerlink" title="后序遍历"></a>后序遍历</h4><blockquote>
<p>访问顺序：先访问子结点再访问跟结点</p>
<p>如上图的后序遍历为：5，6，7，2，3，9，10，8，4，1</p>
</blockquote>
<h4 id="层次遍历"><a href="#层次遍历" class="headerlink" title="层次遍历"></a>层次遍历</h4><blockquote>
<p>访问顺序：从上往下，一层一层访问</p>
<p>如上图的层次遍历为：1，2，3，4，5，6，7，8，9，10</p>
</blockquote>
<h3 id="二叉树"><a href="#二叉树" class="headerlink" title="二叉树"></a>二叉树</h3><table><tr><td bgcolor="#C0FF3E">注意：二叉树并不是一种特殊的树，而是一种独立的数据结构，有明确的左结点和右结点。</td></tr></table>

<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/bd348ff2a55e5827s.png" alt="Markdown"></p>
<blockquote>
<p>完全二叉树的概念：</p>
<p>若设二叉树的深度为h，除第 h 层外，其它各层 (1～h-1) 的结点数都达到最大个数，第 h 层所有的结点都连续集中在最左边，这就是完全二叉树。</p>
</blockquote>
<p>二叉树的重要特性：</p>
<ol>
<li><p>在二叉树的第 i 层上最多有 2^(i-1) 个结点（i&gt;=1）</p>
</li>
<li><p>深度为 k 的二叉树最多有 2^k - 1 个结点（k&gt;=1）</p>
</li>
<li><p>对任何一颗二叉树，如果其叶子结点数为 n0，度为 2 的结点数为 n2，则 <font color="red">n0=n2+1</font></p>
</li>
<li><p>下图中的运算符号为向下取整。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/b6a3685f0df404a7s.png" alt="Markdown"></p>
</li>
</ol>
<h3 id="二叉树的遍历"><a href="#二叉树的遍历" class="headerlink" title="二叉树的遍历"></a>二叉树的遍历</h3><h4 id="前序遍历-1"><a href="#前序遍历-1" class="headerlink" title="前序遍历"></a>前序遍历</h4><ul>
<li>先访问根结点，接着访问左结点，最后访问右结点。</li>
</ul>
<h4 id="中序遍历"><a href="#中序遍历" class="headerlink" title="中序遍历"></a>中序遍历</h4><ul>
<li>先访问左结点，接着访问根结点，最后访问右结点。</li>
</ul>
<h4 id="后序遍历-1"><a href="#后序遍历-1" class="headerlink" title="后序遍历"></a>后序遍历</h4><ul>
<li>先访问左结点，结合访问右结点，最后访问根结点。</li>
</ul>
<h3 id="树与二叉树的转换"><a href="#树与二叉树的转换" class="headerlink" title="树与二叉树的转换"></a>树与二叉树的转换</h3><ol>
<li>加线：在兄弟之间加一连线</li>
<li>抹线：对每个结点，除了其左孩子外，去除其与其余孩子之间的关系</li>
<li>旋转：以树的根结点为轴心，将整树顺时针转45°  </li>
</ol>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/bb236c6f936f362ds.png" alt="Markdown"></p>
<table><tr><td bgcolor="#C0FF3E">注意：转换后，树和二叉树的前序遍历一样。</td></tr></table>

<h3 id="二叉排序树"><a href="#二叉排序树" class="headerlink" title="二叉排序树"></a>二叉排序树</h3><font color="red">左子树的值小于根结点的值，右子树的值大于根结点的值。</font>

<p>在常用的描述二叉排序树的存储结构中，关键字值最大的结点的<font color="red">右指针一定为空</font>。</p>
<h3 id="最优二叉树（哈弗曼树）"><a href="#最优二叉树（哈弗曼树）" class="headerlink" title="最优二叉树（哈弗曼树）"></a>最优二叉树（哈弗曼树）</h3><ul>
<li>需要了解的基本概念</li>
</ul>
<blockquote>
<p>树的路径长度：从根结点到某结点的边数</p>
<p>权：人为赋值</p>
<p>带权路径长度：权值乘于边数</p>
<p>树的带权路径长度：所有的叶子结点的带权路径长度相加</p>
</blockquote>
<hr>
<p>例子：由权值为9，2，5，7的4个叶子结点构造一棵哈弗曼树，该树的带权路径长度为（44）。</p>
<p>解析：</p>
<p>构造哈夫曼树的方法是依次从提供的权值中（9，2，5，7）选取两个权值最小（2，5）的最为左右结点，组合成一个新的根节点（2+5=7）也要参与到第二次权值选择中。也就是说，第二次要从（9，7，7）中选取两个最小的权值。</p>
<p>最后生成的树如下图：</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/4d829baab942a7a5s.png" alt="Markdown"></p>
<p>例子：若一颗哈夫曼树共有9个顶点，则其叶子节点的个数为（5）。</p>
<blockquote>
<p>n0 = n2 +1</p>
<p>9 = n0 + n2 </p>
</blockquote>
<hr>
<h3 id="平衡二叉树"><a href="#平衡二叉树" class="headerlink" title="平衡二叉树"></a>平衡二叉树</h3><h4 id="基本概念"><a href="#基本概念" class="headerlink" title="基本概念"></a>基本概念</h4><p>它或者是一颗空数，或者是一颗这样的树：树中任一结点的左、右子树的深度相差不超过1（即平衡查找树的每个结点的平衡度只能为 -1，0，1 三个值之一）。</p>
<h4 id="平衡树的建立"><a href="#平衡树的建立" class="headerlink" title="平衡树的建立"></a>平衡树的建立</h4><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/f5314bfd06f58c14s.png" alt="Markdown"></p>
<h3 id="平衡树调整"><a href="#平衡树调整" class="headerlink" title="平衡树调整"></a>平衡树调整</h3><h4 id="LL-型平衡旋转（单向右旋平衡处理）"><a href="#LL-型平衡旋转（单向右旋平衡处理）" class="headerlink" title="LL 型平衡旋转（单向右旋平衡处理）"></a>LL 型平衡旋转（单向右旋平衡处理）</h4><ul>
<li>第一种情况：</li>
</ul>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/167fd55a59f969bas.png" alt="Markdown"></p>
<ul>
<li>第二种情况</li>
</ul>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/811d499f5126789as.png" alt="Markdown"></p>
<h4 id="RR-型平衡旋转（单向左旋平衡处理）"><a href="#RR-型平衡旋转（单向左旋平衡处理）" class="headerlink" title="RR 型平衡旋转（单向左旋平衡处理）"></a>RR 型平衡旋转（单向左旋平衡处理）</h4><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/f43270dac0ef1c94s.png" alt="Markdown"></p>
<h4 id="LR-型平衡旋转（双向旋转，先左后右）"><a href="#LR-型平衡旋转（双向旋转，先左后右）" class="headerlink" title="LR 型平衡旋转（双向旋转，先左后右）"></a>LR 型平衡旋转（双向旋转，先左后右）</h4><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/2528267e8cbb94fds.png" alt="Markdown"></p>
<h4 id="RL-型平衡旋转（双向旋转，先右后左）"><a href="#RL-型平衡旋转（双向旋转，先右后左）" class="headerlink" title="RL 型平衡旋转（双向旋转，先右后左）"></a>RL 型平衡旋转（双向旋转，先右后左）</h4><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/44ee1fcea2de5cfcs.png" alt="Markdown"></p>
<h2 id="图"><a href="#图" class="headerlink" title="图"></a>图</h2><h3 id="图的构成"><a href="#图的构成" class="headerlink" title="图的构成"></a>图的构成</h3><ul>
<li>一个图是由两个集合：V和E组成，V是有限的非空顶点集合，E是用顶点对表示的边集合，图G的顶点集和边集分别记为V（G）和E（G），而将图G表示为G=（V,E），也就是说，决定一个图需要知道它的顶点集合与边的集合。</li>
</ul>
<h3 id="无向图与有向图"><a href="#无向图与有向图" class="headerlink" title="无向图与有向图"></a>无向图与有向图</h3><ul>
<li>区别于边是否有箭头。</li>
</ul>
<blockquote>
<p>假设A，B为图中的两个顶点。</p>
<p>无向图的边表示方法：（A，B）</p>
<p>有向图的边表示方法：&lt;A→B&gt;、&lt;B→A&gt;</p>
</blockquote>
<h3 id="顶点的度（degree）"><a href="#顶点的度（degree）" class="headerlink" title="顶点的度（degree）"></a>顶点的度（degree）</h3><ul>
<li><p>关联顶点的边数</p>
</li>
<li><font color="#dddd00">有向图：入度和出度</font> 

</li>
</ul>
<h3 id="子图"><a href="#子图" class="headerlink" title="子图"></a>子图</h3><ul>
<li>已知图A和图B，如果图B中所有的顶点都是图A中的顶点，图B中的所有边都是图A中的边，则图B是图A的子图。允许两种极端情况：什么都不删；删去所有点和所有线</li>
</ul>
<font color="#dddd00">真子图：同“子图”概念一样，但不允许什么都不删。</font>

<h3 id="完全图"><a href="#完全图" class="headerlink" title="完全图"></a>完全图</h3><blockquote>
<p>无向图，每对顶点之间都有一条边相连，则称该图为完全图。</p>
<p>有向图，每对顶点之间都有两条有向边相互连接，则称该图为完全图。</p>
</blockquote>
<h3 id="路径和回路"><a href="#路径和回路" class="headerlink" title="路径和回路"></a>路径和回路</h3><ul>
<li>假设图中的两个顶点A和B，A到B之间经过的边数称为路径。从顶点A出现，最后又回到顶点A，所走过的边组成的称为回路。</li>
</ul>
<h3 id="连通图和连通分量"><a href="#连通图和连通分量" class="headerlink" title="连通图和连通分量"></a>连通图和连通分量</h3><blockquote>
<p>无向图：任何两个顶点都有路径到达的图，称为连通图。</p>
<p>有向图：每两个顶点之间都能够有边（<font color="red">此处的边为有向边</font>）到达的图，称为连通图。</p>
</blockquote>
<p>连通分量：把连通图给分割出来，每一部分都是该图的连通分量。</p>
<h3 id="邻接矩阵"><a href="#邻接矩阵" class="headerlink" title="邻接矩阵"></a>邻接矩阵</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/eb64b6bc2baaa433s.png" alt="Markdown"></p>
<h3 id="图的遍历"><a href="#图的遍历" class="headerlink" title="图的遍历"></a>图的遍历</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/e0a144af13147f6ds.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/33142124db87985cs.png" alt="Markdown"></p>
<h3 id="图的最小生成树"><a href="#图的最小生成树" class="headerlink" title="图的最小生成树"></a>图的最小生成树</h3><h4 id="普里姆算法（Prim-算法）"><a href="#普里姆算法（Prim-算法）" class="headerlink" title="普里姆算法（Prim 算法）"></a>普里姆算法（Prim 算法）</h4><blockquote>
<p>先选取树的第一个顶点（如图点0），再判断所选点到其它点的权值，如果的所选点无法直接到达的点，权值暂时标记为无穷大，然后选取与点0的权值最小的点作为树的第二个顶点。然后再以第二个顶点为基点，判断与其它点的权值大小，循环以上得到第二个顶点的操作，直到生成了树。</p>
</blockquote>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/91d2e68634fd6718s.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/878abd01b5085975s.png" alt="Markdown"></p>
<h4 id="克鲁斯卡算法"><a href="#克鲁斯卡算法" class="headerlink" title="克鲁斯卡算法"></a>克鲁斯卡算法</h4><ul>
<li>算法思想：依次选取权值最小的边，只要不行成回路即可。</li>
</ul>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/2b52ce50fdaa0919s.png" alt="Markdown"></p>
<h3 id="拓扑排序"><a href="#拓扑排序" class="headerlink" title="拓扑排序"></a>拓扑排序</h3><h4 id="AOV-网络"><a href="#AOV-网络" class="headerlink" title="AOV 网络"></a>AOV 网络</h4><p>我们把用有向边表示活动之间开始的先后关系。</p>
<p>这种有向图称为用顶点表示活动网络，简称AOV网络。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/38f7f9bd4b0ba03cs.png" alt="Markdown"></p>
<h4 id="拓扑顺序"><a href="#拓扑顺序" class="headerlink" title="拓扑顺序"></a>拓扑顺序</h4><font color="red">入度为0先进行。</font> 

<p>上图的拓扑序列有：02143567，01243657，02143657，01243567</p>
<h3 id="关键路径"><a href="#关键路径" class="headerlink" title="关键路径"></a>关键路径</h3><h4 id="AOE-网络"><a href="#AOE-网络" class="headerlink" title="AOE 网络"></a>AOE 网络</h4><p>在AOV网络中，如果边上的权表示完成该活动所需的时间，则称这样的AOV为AOE网络。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/bbe2937a9d05538cs.png" alt="Markdown"></p>
<h4 id="关键路径的几个重要概念"><a href="#关键路径的几个重要概念" class="headerlink" title="关键路径的几个重要概念"></a>关键路径的几个重要概念</h4><table><tr><td bgcolor="#C0FF3E">关键路径，就是从源点到终点，路径长度最长的路径。</td></tr></table>

<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/f8719438fda80397s.png" alt="Markdown"></p>
<h2 id="排序算法"><a href="#排序算法" class="headerlink" title="排序算法"></a>排序算法</h2><p>各类排序算法时间复杂度和空间复杂度的对比表</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/9d135039950ee4f7s.png" alt="Markdown"></p>
<h2 id="哈希算法（Hash"><a href="#哈希算法（Hash" class="headerlink" title="哈希算法（Hash)"></a>哈希算法（Hash)</h2><blockquote>
<p>什么是 Hash 表</p>
<p>Hash 函数的构造方法</p>
<p>处理冲突方法</p>
<p>哈希表的查找</p>
</blockquote>
<p>可以查考这个博客学习：<a href="https://www.cnblogs.com/zhangbing12304/p/7997980.html" target="_blank" rel="noopener">https://www.cnblogs.com/zhangbing12304/p/7997980.html</a></p>
<h2 id="查找算法"><a href="#查找算法" class="headerlink" title="查找算法"></a>查找算法</h2><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/c0d01e4f12bdfdc2s.png" alt="Markdown"></p>
<h1 id="编译原理"><a href="#编译原理" class="headerlink" title="编译原理"></a>编译原理</h1><h2 id="文法"><a href="#文法" class="headerlink" title="文法"></a>文法</h2><h3 id="终结符与非终结符"><a href="#终结符与非终结符" class="headerlink" title="终结符与非终结符"></a>终结符与非终结符</h3><p>大写字母为非终结符</p>
<p>小写字母为终结符，不能单独在左边。</p>
<hr>
<p>例子：</p>
<p>有文法G2[S]为：</p>
<ul>
<li>S-&gt;Ap</li>
<li>S-&gt;Bq</li>
<li>A-&gt;a</li>
<li>A-&gt;cA</li>
<li>B-&gt;b</li>
<li>B-&gt;dB</li>
</ul>
<p>则 S,A,B为非终结符，而p,q,a,b,c,d为终结符。</p>
<ul>
<li><font color="red">VN 表示非终结符集合，即 VN = {S,A,B}；</font>
</li>
<li><font color="red">VT 表示终结符集合，即 VT = {p,q,a,b,c,d}；</font>
</li>
<li><font color="red">P 表示生成式，即上面给出的生成式（S-&gt;Ap等）；</font>
</li>
<li><font color="red">S 表示开始符。</font>

</li>
</ul>
<hr>
<h3 id="文法的类型"><a href="#文法的类型" class="headerlink" title="文法的类型"></a>文法的类型</h3><h4 id="0-型文法"><a href="#0-型文法" class="headerlink" title="0 型文法"></a>0 型文法</h4><p>设G=（VN，VT，P，S），如果它的每个产生式α→β是这样一种结构：α∈( VN∪VT )且至少含有一个<font color="red">非终结符</font>，而 β∈(VN∪VT)，则G是一个0型文法。0型文法也称<font color="red">短语文法</font>。</p>
<p>一个非常重要的理论结果是：0型文法的能力相当于<font color="red">图灵机</font>(Turing)。或者说， 任何0型文语言都是<font color="red">递归可枚举的</font>，反之，递归可枚举集必定是一个0型语言。</p>
<p>0型文法是这几类文法中，<font color="red">限制最少的一个</font>，所以我们在试题中见到的,至少是0型文 法。 </p>
<h4 id="1-型文法"><a href="#1-型文法" class="headerlink" title="1 型文法"></a>1 型文法</h4><p>1型文法也叫<font color="red">上下文有关文法</font>，此文法对应于<font color="red">线性有界自动机</font>。它是在0型文法的基础上每一个α→β,都有 <font color="red">|β|&gt;=|α|</font>。这里的|β|表示的是β的长度。 </p>
<blockquote>
<p>例如：</p>
<p>A-&gt;B，|α| = 1，而 |β| = 1；</p>
<p>A-&gt;Bba，|α| = 1，而 |β| = 3.</p>
</blockquote>
<table><tr><td bgcolor="#C0FF3E">注意：虽然要求|β|&gt;=|α|，但有一特例：α→ε也满足1型文法。<br> 如有 A-&gt;Ba 则 |β|=2,|α|=1符合1型文法要求。反之,如 aA-&gt;a，则不符合1型文法。   </td></tr></table>

<h4 id="2-型文法"><a href="#2-型文法" class="headerlink" title="2 型文法"></a>2 型文法</h4><p>2型文法也叫<font color="red">上下文无关文法</font>，它对应于<font color="red">下推自动机</font>。2型文法是在1型文法的基础上,再满足：<font color="red">每一个 α→β 都有 α 是非终结符</font>。如A-&gt;Ba,符合2型文法要求。 </p>
<table><tr><td bgcolor="#C0FF3E">如 Ab-&gt;Bab 虽然符合1型文法要求,但不符合2型文法要求，因为其α=Ab，而Ab不是一个非终结符。   </td></tr></table>

<h4 id="3-型文法"><a href="#3-型文法" class="headerlink" title="3 型文法"></a>3 型文法</h4><p>3型文法也叫<font color="red">正规文法</font>，它对应于<font color="red">有限状态自动机</font>。它是在2型文法的基础上满足：<font color="red">A→α|αB</font>（右线性）或 <font color="red">A→α|Bα</font>（左线性）。 α 代表的是非终结符，不一定要求字母相同。</p>
<table><tr><td bgcolor="#FFFF00">特别注意：右线性和左线性，两套规则不能同时存在。</td></tr></table>

<p>如有：A-&gt;a,A-&gt;aB, B-&gt;a, B-&gt;cB，则符合3型文法的要求。 </p>
<p>但如果推导 为:A-&gt;ab, A-&gt;aB, B-&gt;a, B-&gt;cB</p>
<p>或推导 为:A-&gt;a, A-&gt;Ba, B-&gt;a, B-&gt;cB则不符合3型方法的要求了。</p>
<blockquote>
<p>解释：</p>
<p>例子A-&gt;ab,A-&gt;aB,B-&gt;a,B-&gt;cB中的A-&gt;ab不符合3型文法的定义,如果把后面的ab,改成“一个非终结 符＋一个终结符”的形式（即为aB）就对了。</p>
<p>例子A-&gt;a,A-&gt;Ba,B-&gt;a,B-&gt;cB中如果把B-&gt;cB改为 B-&gt;Bc的形式就对了,因为A→α|αB（右线性）和A→α|Bα（左线性）两套规则不能同时出现在一个语法中,只能完全满足其中的一个,才能算 3型文法。</p>
</blockquote>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/63f579806f65cba5s.png" alt="Markdown"></p>
<h2 id="正规式（正则表达式）"><a href="#正规式（正则表达式）" class="headerlink" title="正规式（正则表达式）"></a>正规式（正则表达式）</h2><p>正规式与正规文法之间的转换：</p>
<font color="red">*：代表的是大于等于0的数</font>

<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/9009a3f43a23a7f9s.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/38feee4768ddd463s.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/8e23d4deb3eaf601s.jpg" alt="Markdown"></p>
<h2 id="有限自动机（有穷自动机）"><a href="#有限自动机（有穷自动机）" class="headerlink" title="有限自动机（有穷自动机）"></a>有限自动机（有穷自动机）</h2><h3 id="确定的有限自动机（DFA）"><a href="#确定的有限自动机（DFA）" class="headerlink" title="确定的有限自动机（DFA）"></a>确定的有限自动机（DFA）</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/aaa9f16e5d7a5527s.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/e6a00d463dd08f57s.png" alt="Markdown"></p>
<p>附加解释：</p>
<p>1.根据题目提供的状态集合 {S,A,B,C,f} 画出5个状态</p>
<p>2.终态集合中只有一个元素 f ，把 f 画成双圈表示终态</p>
<p>3.K（S，0）= B，表示在S状态，输入 0 就能到达B状态。</p>
<table><tr><td bgcolor="#FFFF00">注意：DFA与NFA最大的区别就是，DFA只有一个确定的终态，NFA可以有多个终态。</td></tr></table>

<h3 id="不确定的有限自动机（NFA）"><a href="#不确定的有限自动机（NFA）" class="headerlink" title="不确定的有限自动机（NFA）"></a>不确定的有限自动机（NFA）</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/c96de18e783beab2s.png" alt="Markdown"></p>
<h3 id="正规式与有限自动机之间的转换"><a href="#正规式与有限自动机之间的转换" class="headerlink" title="正规式与有限自动机之间的转换"></a>正规式与有限自动机之间的转换</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/bc99b0aeaf975344s.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/4ae7b23524cf92b9s.png" alt="Markdown"></p>
<h1 id="操作系统"><a href="#操作系统" class="headerlink" title="操作系统"></a>操作系统</h1><h2 id="进程"><a href="#进程" class="headerlink" title="进程"></a>进程</h2><h3 id="进程的三态图"><a href="#进程的三态图" class="headerlink" title="进程的三态图"></a>进程的三态图</h3><p>就绪状态：进程已得到运行所需资源，只等待 CPU 的调度便可运行；</p>
<p>运行状态：进程已得到运行所需资源，并且得到了 CPU 的调度；</p>
<p>等待状态：不具备运行条件、等待时机的状态。（等待状态也称为阻塞状态）</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/463ff995cd587e16s.png" alt="Markdown"></p>
<h3 id="进程的五态图（了解）"><a href="#进程的五态图（了解）" class="headerlink" title="进程的五态图（了解）"></a>进程的五态图（了解）</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/692337779da30cd9s.png" alt="Markdown"></p>
<h3 id="进程的死锁"><a href="#进程的死锁" class="headerlink" title="进程的死锁"></a>进程的死锁</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/6595cb3113f36678s.png" alt="Markdown"></p>
<ul>
<li>死锁发生的必要条件：</li>
</ul>
<blockquote>
<p>互斥条件：即一个资源每次只能被一个进程使用。</p>
<p>保持和等待条件：有一个进程已获得了一些资源，但因请求其他资源被阻塞时，对已获得的资源保持不放。</p>
<p>不剥夺条件：有些系统资源是不可剥夺的，当某个进程已获得这种资源后，系统不能强行收回，只能由进程使用完时自己释放。</p>
<p>环路等待条件：若干个进程形成环形链，每个都占用对方要申请的下一个资源。</p>
</blockquote>
<ul>
<li>解决死锁的策略:</li>
</ul>
<blockquote>
<p>死锁预防：例如：要求用户申请资源时一起申请所需的全部资源，这就破坏了保持和等待条件；将资源分层，得到上一层资源后，才能够申请下一层资源，它破坏了环路等待条件。预防通常会降低系统的效率。</p>
<p>死锁避免：避免是指进程在每次申请资源时判断这些操作是否安全，典型算法是“银行家算法”。但这种算法会增加系统的开销。</p>
<p>死锁检测：前两者是事前措施，而死锁的检测则是判断系统是否处于死锁状态，如果是，则执行死锁解除策略。</p>
<p>死锁解除：这是与死锁检测结合使用的，它使用的方式就是剥夺。即将资源强行分配给别的进程。</p>
</blockquote>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/97152d3e3d271cdcs.png" alt="Markdown"></p>
<h3 id="前趋图"><a href="#前趋图" class="headerlink" title="前趋图"></a>前趋图</h3><p>前趋图是一个<font color="red">有向无循环图</font>，记为 DAG ，用于描述进程之间执行的前后关系。图中的每个结点可用于描述一个程序段或进程，乃至一条语句；结点间的有向边则用于表示两个结点之间存在的偏序或前趋关系“→”。</p>
<p>如果 Pi 必须在 Pj 之前完成，可写成 Pi → Pj，称 Pi 是 Pj 的直接前驱，而 Pj 是 Pi 的直接后继。</p>
<p>把没有前驱的结点，称为初始结点。</p>
<p>把没有后继的结点，称为终止结点。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/9b05e45b3d1472fes.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/669fe8383f23dec6s.png" alt="Markdown"></p>
<h3 id="PV-操作"><a href="#PV-操作" class="headerlink" title="PV 操作"></a>PV 操作</h3><p>临界资源：诸进程间需要互斥方式对其进行共享的资源，如打印机、磁带机等。</p>
<p>临界区：每个进程中访问临界资源的那段代码称为临界区。</p>
<p>信号量：是一种特殊的变量。</p>
<p>P 操作：也称为 down（）、wait（）操作，使 S=S-1，若S&lt;0，进程暂停执行，放入信号量的等待队列。</p>
<p>V 操作：也称为 up（）、signal（）操作，使 S=S+1，若S&lt;=0，唤醒等待队列种的一个进程。</p>
<blockquote>
<p>生产者与消费者问题</p>
<p>读者与写着问题</p>
</blockquote>
<h3 id="管程"><a href="#管程" class="headerlink" title="管程"></a>管程</h3><p>概念：指关于共享资源的数据及在其上操作的一组过程或共享数据结构及其规定的所有操作。</p>
<blockquote>
<p>PV操作缺点：</p>
<p>易读性差、不利于修改和维护、正确性难以保证</p>
</blockquote>
<p>在利用管程方法来解决生产者-消费者问题时，首先便是为它们建立一个管程，并命名为PC。包括两个过程:</p>
<ul>
<li><p>(1) put(item)过程。生产者利用该过程将自己生产的产品投放到缓冲池种，并用整型变量 count 来表示在缓冲池种已有的产量数目，当 count &gt;= n 时，表示缓冲池已经满了，生产者须等待。</p>
</li>
<li><p>(2) get(item)过程。消费者利用该过程从缓冲池种取出一个产品，当 count &lt;= 0 时，表示缓冲池中已无可取用的产品，消费者应等待。</p>
</li>
</ul>
<h2 id="存储"><a href="#存储" class="headerlink" title="存储"></a>存储</h2><h3 id="实存管理"><a href="#实存管理" class="headerlink" title="实存管理"></a>实存管理</h3><p>存储管理的任务是存储空间的分配与回收。在现代操作系统中通常有的单一连续分配、固定分区分配、可变分区分配（动态分配法）三种分配方法。</p>
<h3 id="虚存管理"><a href="#虚存管理" class="headerlink" title="虚存管理"></a>虚存管理</h3><h4 id="页式存储组织"><a href="#页式存储组织" class="headerlink" title="页式存储组织"></a>页式存储组织</h4><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/d918a5bbb2475084s.png" alt="Markdown"></p>
<blockquote>
<p>优点：利用率搞，产生的内存碎片小，内存间分配及管理简单。</p>
<p>缺点：要有相应的硬件支持，增加了系统开销；请求调页的算法如选择不当，有可能产生抖动现象。</p>
</blockquote>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/f41b8151dfcc28ffs.png" alt="Markdown"></p>
<blockquote>
<p>解析：</p>
<p>已知页面大小为 4K ，因为 4K = 2^12，所以页内地址有12位。将逻辑地址8644（10）转成二进制，10 0001 1100 0100（2），其中的低12位为页内偏移量，最高两位（10）则为页号，所以逻辑地址8644的页号为10（2），即十进制的2，所以从上图表格可以得到物理块号为8，即二进制的1000。把物理块号和页内偏移地址拼合得 1000 0001 1100 0100，化为十进制得33220。</p>
</blockquote>
<h4 id="段式存储组织"><a href="#段式存储组织" class="headerlink" title="段式存储组织"></a>段式存储组织</h4><blockquote>
<p>优点：便于多道程序共享内存，便于对存储器的保护，各段程序修改互不影响。</p>
<p>缺点：内存利用率低，内存碎片浪费大。</p>
</blockquote>
<h4 id="段页式存储组织"><a href="#段页式存储组织" class="headerlink" title="段页式存储组织"></a>段页式存储组织</h4><p>分段之后，在每段中进行分页。</p>
<blockquote>
<p>优点：空间浪费小、存储共享容易、存储保护容易、能动态连接。</p>
<p>缺点：由于管理软件的增加，复杂性和开销也随之增加，需要的硬件以及占用的内容也有所增加，使得执行速度大大下降。</p>
</blockquote>
<p>在段页式管理的存储器中，实存等分为<font color="red">页</font>、程序按逻辑模块分成<font color="red">段</font>。</p>
<p>在多道程序环境下，每道程序还需要一个<font color="red">基号</font>作为用户标志号。</p>
<p>每道程序都有对应的<font color="red">一个段表和一组页表</font>。一个逻辑地址包括<font color="red">基号</font>x、段号s、页号p和页内地址d四个部分。</p>
<h4 id="页面置换算法"><a href="#页面置换算法" class="headerlink" title="页面置换算法"></a>页面置换算法</h4><ul>
<li><p>最优算法（OPT）</p>
</li>
<li><p>先进先出算法（FIFO）：保留最近需要使用的页面</p>
</li>
<li><p>最近最少使用算法（LRU）：淘汰最长时间没有被访问的页面</p>
</li>
</ul>
<p>没有进行页面置换的，不算入缺页次数，但刚刚开始的3次需要算入。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/20c650c01ba9cc2cs.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/47f23088313b6d5as.png" alt="Markdown"></p>
<h4 id="局部性原理"><a href="#局部性原理" class="headerlink" title="局部性原理"></a>局部性原理</h4><p>时间局部性：被引用过一次的存储器位置在未来会被多次引用（通常在循环中）。</p>
<p>空间局部性：如果一个存储器的位置被引用，那么将来他附近的位置也会被引用。</p>
<h2 id="作业管理"><a href="#作业管理" class="headerlink" title="作业管理"></a>作业管理</h2><p>作业右三部分构成，即程序、数据和作业说明书，它是用户在完成一项任务过程中要求计算机系统所做工作的集合。作业的状态有后备状态、运行状态和完成状态三种。</p>
<p>等待时间 = 开始时间 - 提交时间</p>
<p>周转时间 = 完成时间 - 提交时间</p>
<h3 id="最短作业优先调度算法"><a href="#最短作业优先调度算法" class="headerlink" title="最短作业优先调度算法"></a>最短作业优先调度算法</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/f5b92cf12f660f35s.png" alt="Markdown"></p>
<h3 id="优先数调度算法"><a href="#优先数调度算法" class="headerlink" title="优先数调度算法"></a>优先数调度算法</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/3c7d568099ea5744s.png" alt="Markdown"></p>
<h3 id="先来先服务调度算法"><a href="#先来先服务调度算法" class="headerlink" title="先来先服务调度算法"></a>先来先服务调度算法</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/533ac9190e472c9cs.png" alt="Markdown"></p>
<h3 id="时间片轮转算法"><a href="#时间片轮转算法" class="headerlink" title="时间片轮转算法"></a>时间片轮转算法</h3><p>每个任务轮流执行一个时间片，时间片结束时，不管任务是否完成都要先暂停任务。</p>
<h3 id="带权作业周转时间"><a href="#带权作业周转时间" class="headerlink" title="带权作业周转时间"></a>带权作业周转时间</h3><p>单个作业的带全周转时间：作业的周转时间 ➗ 作业的实际运行时间</p>
<p>作业平均带权周转时间：所有单个作业的带权周转时间相加 ➗ 作业个数</p>
<h3 id="最高响应比有线算法"><a href="#最高响应比有线算法" class="headerlink" title="最高响应比有线算法"></a>最高响应比有线算法</h3><p>比较难，需自行查阅资料学习。</p>
<h2 id="文件管理"><a href="#文件管理" class="headerlink" title="文件管理"></a>文件管理</h2><p>文件目录</p>
<p>一级目录结构（不允许存在相同名字的文件）</p>
<p>二级目录结构（允许存在相同名字的文件）</p>
<p>树形目录结构（注意绝对路径和相对路径）</p>
<h2 id="Spooling技术"><a href="#Spooling技术" class="headerlink" title="Spooling技术"></a>Spooling技术</h2><p>举例：平时在打印店打印的时候，在打印机打印的过程中，多台电脑可以同时继续提交打印任务，这时打印机也不会说出什么问题，因为电脑提交的打印任务是放到了打印机的缓存区，然后打印机会根据提交的顺序打印。这就是利用到了 Spooling 技术。</p>
<h1 id="系统开发与软件工程"><a href="#系统开发与软件工程" class="headerlink" title="系统开发与软件工程"></a>系统开发与软件工程</h1><h2 id="软件开发生命周期模型"><a href="#软件开发生命周期模型" class="headerlink" title="软件开发生命周期模型"></a>软件开发生命周期模型</h2><h3 id="瀑布模型"><a href="#瀑布模型" class="headerlink" title="瀑布模型"></a>瀑布模型</h3><p>瀑布模型是一种<font color="red">理想化</font>的开发模型，瀑布模型要求有明确的需求分析，而要达到这一点在现实开发中几乎不可能。与其最相适应的软件开发方法是<font color="red">结构化方法</font>。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/8e6b7474946c9dc0s.png" alt="Markdown"></p>
<h3 id="原型法"><a href="#原型法" class="headerlink" title="原型法"></a>原型法</h3><p>原型法的最大特点就是它采用了一种<font color="red">动态定义需求</font>的方法。这样，优势也就提现出来了，即不需要有明确的需求。</p>
<h3 id="螺旋模型"><a href="#螺旋模型" class="headerlink" title="螺旋模型"></a>螺旋模型</h3><p>螺旋模型结合了<font color="red">瀑布模型和演化模型</font>的优点，最主要的特点在于加入了<font color="red">风险分析</font>。它是由<font color="red">制定计划、风险分析、实施工程、客户评估</font>这一循环组成的，它最初从<font color="red"><font color="red">概念项目</font>开始第一个螺旋。</font></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/a3eb316f4afeb8f9s.png" alt="Markdown"></p>
<h3 id="喷泉模型"><a href="#喷泉模型" class="headerlink" title="喷泉模型"></a>喷泉模型</h3><p>喷泉模型主要用于描述面向对象的开发过程，最核心的特点是<font color="red">迭代</font>（有重复部分）。所有的开发活动没有明显的边界，允许各种开发活动交叉进行。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/b3dd7434ad4c1615s.png" alt="Markdown"></p>
<h2 id="项目管理基础"><a href="#项目管理基础" class="headerlink" title="项目管理基础"></a>项目管理基础</h2><h3 id="软件项目管理的内容"><a href="#软件项目管理的内容" class="headerlink" title="软件项目管理的内容"></a>软件项目管理的内容</h3><p>软件项目管理的核心问题（铁三角）：<font color="red">成本、质量、进度</font></p>
<p>软件项目管理的主要活动：</p>
<ol>
<li>启动软件项目</li>
<li>度量</li>
<li>估算</li>
<li>风险分析</li>
<li>进度安排</li>
<li>追踪和控制</li>
</ol>
<p>软件项目管理的三个阶段：</p>
<ol>
<li>项目启动阶段（项目立项、可行性分析、项目的初步计划）</li>
<li>项目实施阶段（制定计划、执行计划、监控进度、根据实际情况进行计划调整、关注需求变更）</li>
<li>项目关闭阶段</li>
</ol>
<h3 id="软件项目估算"><a href="#软件项目估算" class="headerlink" title="软件项目估算"></a>软件项目估算</h3><h4 id="自顶向下估算法"><a href="#自顶向下估算法" class="headerlink" title="自顶向下估算法"></a>自顶向下估算法</h4><p>优点：耗费时间少</p>
<p>这种方式的一种通常采用的方法，但其并不能够有效地解决项目估算的问题，经常容易使得估算值与实际值产生很大的差异。比较适合估算系统级别的。</p>
<h4 id="自底向上估算法"><a href="#自底向上估算法" class="headerlink" title="自底向上估算法"></a>自底向上估算法</h4><p>这种方式通常能够得到较为客观的、可操作的估算结果，而且还能够使得项目组成员主动地参与，并且通常能够对自己所做的承诺权利守信，从而为项目树立了一个良好的文化。</p>
<h3 id="软件规模估算"><a href="#软件规模估算" class="headerlink" title="软件规模估算"></a>软件规模估算</h3><h4 id="LOC-估算法"><a href="#LOC-估算法" class="headerlink" title="LOC 估算法"></a>LOC 估算法</h4><p>也就是估算<font color="red">软件的代码行数</font>，通常使用 <font color="red">KLOC</font>（千行代码）为单位</p>
<h4 id="FP-估算法"><a href="#FP-估算法" class="headerlink" title="FP 估算法"></a>FP 估算法</h4><p>FP（<font color="red">功能点</font>）是一种衡量工作量大小的单位，它的计算方法是：功能点 = 信息处理规模 X 技术复杂度，其中，技术复杂度 = 0.65 + 调节因子</p>
<ul>
<li>信息处理规模</li>
<li>技术复杂度（取值0~0.05之间）</li>
</ul>
<h3 id="软件工作量估算"><a href="#软件工作量估算" class="headerlink" title="软件工作量估算"></a>软件工作量估算</h3><ol>
<li>IBM 模型</li>
<li>普特南模型</li>
<li>COCOMO 模型</li>
</ol>
<h3 id="软件成本估算"><a href="#软件成本估算" class="headerlink" title="软件成本估算"></a>软件成本估算</h3><h3 id="常用的估算辅助方法"><a href="#常用的估算辅助方法" class="headerlink" title="常用的估算辅助方法"></a>常用的估算辅助方法</h3><p>Delphi 法，专家判定技术</p>
<p>Standard-component 方法</p>
<h3 id="软件项目组织与计划"><a href="#软件项目组织与计划" class="headerlink" title="软件项目组织与计划"></a>软件项目组织与计划</h3><ul>
<li>项目计划包括：项目组计划和个人项目计划</li>
<li>计划的编制，应该包括两个重要的图标：人员职责矩阵和甘特图</li>
<li>已获值分析（<font color="red">EVA</font>） 是最常用的<font color="red">项目进度监控</font>方法。</li>
</ul>
<h4 id="Gannt-图"><a href="#Gannt-图" class="headerlink" title="Gannt 图"></a>Gannt 图</h4><p><strong>特点</strong>：</p>
<ul>
<li>使用水平线段表示任务的工作阶段</li>
<li>线段的起点和终点分别对应着任务的开工时间和完成时间</li>
<li>线段的长度表示完成任务所需的时间</li>
</ul>
<p><strong>优点</strong>：</p>
<ul>
<li>标明了各任务的计划进度和当前进度，能动态地反映项目进展</li>
</ul>
<p><strong>缺点</strong>：</p>
<ul>
<li>难以反映多个任务之间存在的复杂逻辑关系</li>
</ul>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/8cf0612aad6e6e8cs.png" alt="Markdown"></p>
<h4 id="PERT-技术和-CPM-方法"><a href="#PERT-技术和-CPM-方法" class="headerlink" title="PERT 技术和 CPM 方法"></a>PERT 技术和 CPM 方法</h4><p>PERT 技术叫做计划评审技术，CPM 方法叫做关键路径法。</p>
<p>它们都是安排开发进度，指定软件开发计划的常用的方法。它们都采用网络图来描述一个项目的任务网络，也就是从一个项目的开始到结束，把应当完成的任务用图或表的形势表示出来。</p>
<h3 id="配置管理"><a href="#配置管理" class="headerlink" title="配置管理"></a>配置管理</h3><p>软件配置管理的任务包括：</p>
<ol>
<li>制定配置管理计划</li>
<li>实施变更管理</li>
<li>实施版本管理</li>
<li>发行管理</li>
</ol>
<p>实现变更管理需要借助于配置数据库和基线。</p>
<p>配置数据库可以分为：开发哭、受控库、产品库。</p>
<p>基线：是指软件生命周期各开发阶段末尾的特定点，也称为里程碑。</p>
<p>版本管理：是指对系统不同版本进行标识和跟踪的过程。</p>
<h3 id="风险管理"><a href="#风险管理" class="headerlink" title="风险管理"></a>风险管理</h3><p>风险管理通常包括三个主要活动：</p>
<p>风险识别</p>
<p>风险估计</p>
<p>风险驾驭</p>
<h2 id="软件测试与维护"><a href="#软件测试与维护" class="headerlink" title="软件测试与维护"></a>软件测试与维护</h2><h1 id="数据库"><a href="#数据库" class="headerlink" title="数据库"></a>数据库</h1><h2 id="ER-模型"><a href="#ER-模型" class="headerlink" title="ER 模型"></a>ER 模型</h2><h3 id="基本概念-1"><a href="#基本概念-1" class="headerlink" title="基本概念"></a>基本概念</h3><p>实体（Entity）：是指客观存在可以相互区别的事物。实体可以是具体的对象，如：一辆汽车等；也可以是抽象的事件，如：一次借书等。实体型用矩形表示。</p>
<p>属性（Attribute）：实体有很多特性，每一个特性称为属性。每个属性有一个值域，其类型可以是整数型、实数型、字符串型。属性用椭圆形表示。</p>
<p>联系（Relationship）：</p>
<p>1：1联系：如果实体集 E1 中的每个实体最多只能和实体集 E2 中的一个实体有联系，反之亦然，那么实体集 E1 对 E2 的联系称为“一对一联系”。</p>
<p>1：N联系：如果实体集 E1 中的每个实体与实体集 E2 中任意个（零个或多个）实体有联系，而 E2 中每个实体至多和 E1 中的一个实体有联系，那么实体集 E1 对 E2 的联系称为“一对多联系”。</p>
<p>M：N联系：如果实体集 E1 中的每个实体与实体集 E2 中任意个（零个或多个）实体有联系，反之亦然，那么实体集 E1 对 E2 的联系称为“多对多联系”。</p>
<h3 id="ER-模型转换成关系模式的规则"><a href="#ER-模型转换成关系模式的规则" class="headerlink" title="ER 模型转换成关系模式的规则"></a>ER 模型转换成关系模式的规则</h3><ul>
<li><p>一个实体型转换为一个关系模式，实体的属性就是关系的属性，实体的码就是关系的码。</p>
</li>
<li><p>一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。 如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性, 每个实体的码均是该关系的候选码。 如果与某一端实体对应的关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。</p>
</li>
<li><p>一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。 如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系体本身的属性均转换为关系的属性,而关系的码为n端实体的码。</p>
</li>
<li><p>一个m:n联系转换为一个关系模式。 与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。</p>
</li>
<li><p>三个或三个以上实体间的以上多元联系可以转换为一个关系模式。 与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性。 而关系的码为各实体码的组合。</p>
</li>
</ul>
<h2 id="键（码）、函数依赖及范式"><a href="#键（码）、函数依赖及范式" class="headerlink" title="键（码）、函数依赖及范式"></a>键（码）、函数依赖及范式</h2><h3 id="概念理解"><a href="#概念理解" class="headerlink" title="概念理解"></a>概念理解</h3><p>超键：在关系模式中，能唯一标识元组的属性集称为超键。</p>
<p>候选键：在关系模式中，能唯一标示元组并且不含多余属性的属性集成为候选键。值得注意的是，超键与候选键是有区别的，超键可能含有多余属性，而候选键不能。</p>
<p>主键：在一个关系的若干个候选键中随意指定一个作为关键字，则此关键字就是主键。</p>
<p>外键：如果关系模式R1中的某属性集不是R1的候选键，而是关系模式R2的候选键，则这个属性集对模式R1而言是外键。注意，这不是对于R2而言的。</p>
<p>主属性：候选码中的诸属性称为主属性。</p>
<blockquote>
<p>例题：</p>
<p>请指出关系模式: 成绩(学号,姓名,课程号,成绩)的主属性和非主属性注:学生无同名.</p>
<p>候选键：(学号,课程号)、(姓名,课程号)</p>
<p>主属性：学号,姓名,课程号</p>
</blockquote>
<h3 id="函数依赖"><a href="#函数依赖" class="headerlink" title="函数依赖"></a>函数依赖</h3><p>函数依赖:设R(U)是属性集U上的关系模式,X,Y是U的子集 若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作X→Y。</p>
<p>三个基本定义：</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/e8b5c419e1128432s.png" alt="Markdown"></p>
<h3 id="范式"><a href="#范式" class="headerlink" title="范式"></a>范式</h3><ul>
<li><p>第一范式（1NF）：在关系模式 R 中，当且仅当所有域只包含原子值，即每个分量都是不可再分的数据项，则称实体 E 是第一范式。</p>
</li>
<li><p>第二范式（2NF）：当且仅当实体 E 是第一范式，且每一个非键属性完全依赖主键时，则称实体 E 是第二范式。（存在数据冗余等问题，可以每个非键属性给单独拆分到一个关系模式里）</p>
</li>
<li><p>第三范式（3NF）：当且仅当实体 E 是第二范式，且 E 中没有非主属性传递依赖于码时，则称实体 E 是第三范式。（消除传递函数依赖）</p>
</li>
</ul>
<h2 id="无损联接分解"><a href="#无损联接分解" class="headerlink" title="无损联接分解"></a>无损联接分解</h2><p>有损：不能还原</p>
<p>无损：可以还原</p>
<p>无损联接分解：所谓无损联接分解是指将一个关系模式分解成若干个关系模式后，通过自然联接和投影等运算仍能还原到原来的关系模式，则称这种分解为无损联接分解。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/fc083ceff0b93b91s.png" alt="Markdown"></p>
<h2 id="关系代数及元组演算"><a href="#关系代数及元组演算" class="headerlink" title="关系代数及元组演算"></a>关系代数及元组演算</h2><h3 id="关系代数的基本运算"><a href="#关系代数的基本运算" class="headerlink" title="关系代数的基本运算"></a>关系代数的基本运算</h3><p>关系代数的五种基本运算并、差、笛卡尔积、选择和投影。</p>
<h4 id="并-Union-用符号U表示"><a href="#并-Union-用符号U表示" class="headerlink" title="并(Union,用符号U表示)"></a>并(Union,用符号U表示)</h4><p>计算两个表在集合理论上的联合。 给出表R和S(两者有相同元/列数),RUS的联合就是所有在R里面有,或S里面有,或在两个表里面都有的记录集合。</p>
<h4 id="差-Difference-用符号-表示"><a href="#差-Difference-用符号-表示" class="headerlink" title="差(Difference,用符号-表示)"></a>差(Difference,用符号-表示)</h4><p> 计算两个表的区别的集合。 令R和S是拥有相同元/列的表。 R-S是在R里面却不在S里面的记录的集合。</p>
<h4 id="笛卡尔积-PRODUCT-用符号x表示"><a href="#笛卡尔积-PRODUCT-用符号x表示" class="headerlink" title="笛卡尔积(PRODUCT,用符号x表示)"></a>笛卡尔积(PRODUCT,用符号x表示)</h4><p>计算两个关系的笛卡尔乘积。令R为有K1元的表,令S为有K2元的表。RxS是所有k1+K2元记录的集合,其前k1个元素来自R里的一条记录,而后K2个元素来自S里的一条记录。（可以简单理解为字段的拼接）</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/7f83836c9e7c4f93s.png" alt="Markdown"></p>
<h4 id="投影-Project-用符号π表示"><a href="#投影-Project-用符号π表示" class="headerlink" title="投影(Project,用符号π表示)"></a>投影(Project,用符号π表示)</h4><p>从一个关系里面抽取指明的属性(列)。 令R为一个包含一个属性X的关系。 πX(R)= { t(X) | t ∈ R },这里t(X)表示记录里的属性X的值。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/fcbce2913aa08bf4s.png" alt="Markdown"></p>
<h4 id="选择-Select-用符号-σ-表示"><a href="#选择-Select-用符号-σ-表示" class="headerlink" title="选择(Select,用符号 σ 表示)"></a>选择(Select,用符号 σ 表示)</h4><p>从关系里面抽取出满足给定限制条件的记录。</p>
<p>令R为一个表,包含一个属性A。  σ A= a(R) ={ t ∈ R| t(A) = a }这里表示R的一条记录,而 t(A)表示记录 t 的属性A的值。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/b51bf6d64aca6839s.png" alt="Markdown"></p>
<h4 id="交-Intersection-用符号∩表示"><a href="#交-Intersection-用符号∩表示" class="headerlink" title="交(Intersection,用符号∩表示)"></a>交(Intersection,用符号∩表示)</h4><p>计算两个表集合理论上的交集。给出表R和S,R∩S是同时在R和S里面的记录的集合。我们同样要求R和S拥有相同的元/列数。</p>
<h4 id="联接-Join，用符号⋈表示"><a href="#联接-Join，用符号⋈表示" class="headerlink" title="联接(Join，用符号⋈表示)"></a>联接(Join，用符号⋈表示)</h4><p>通过共同属性联接两个表。令R为一个有属性A，B，C的表，令S为一个有属性C，D，E的表。两个表有一个共同的属性C。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/55f388ff91f08100s.png" alt="Markdown"></p>
<h4 id="除-Division，用符号➗表示"><a href="#除-Division，用符号➗表示" class="headerlink" title="除(Division，用符号➗表示)"></a>除(Division，用符号➗表示)</h4><p>设有关系R（X，Y）与关系S（Z），其中，X，Y，Z为属性集合。假设Y和Z具有相同的属性个数，且对应属性出自相同域。关系R（X,Y）➗S（Z）所得的商关系是关系R在属性X上投影的一个子集，该子集和S（Z）的笛卡尔积必须包含在R（X，Y）中，记为R➗S。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/55f388ff91f08100s.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/9bcaa9218b863cd2s.png" alt="Markdown"></p>
<h3 id="元组演算"><a href="#元组演算" class="headerlink" title="元组演算"></a>元组演算</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/c5d5a6ee38e819fes.png" alt="Markdown"></p>
<h2 id="SQL语言"><a href="#SQL语言" class="headerlink" title="SQL语言"></a>SQL语言</h2><p>SQL是结构化查询语言。</p>
<blockquote>
<p>SQL的基本功能:</p>
<p>1.数据定义(Data Definition):可以简便地建立数据库和表的结构。</p>
<p>2.数据管理(Data Management):可以实现表中数据的输入,修改、删除和更新。</p>
<p>3.数据查询(Data Query):可以对数据库中的内容进行查询。</p>
</blockquote>
<blockquote>
<p>SQL的特点:</p>
<p>1.SQL语言简洁,易学易用。 完成核心操作只需要9个动词。</p>
<p>2.有十分灵活和强大的查询功能。用一条SQL命令就能完成相当复杂的查询操作。</p>
<p>3.功能丰富。SQL虽然名为查询语言,但实际上具有数据定义、数据查询、更新和数据控制等多种功能。</p>
<p>4.SQL是一种高度<font color="red">非过程化的语言</font>。用户只需要指出”做什么”,而不需指明”怎么做”。</p>
</blockquote>
<h3 id="基本表的创建"><a href="#基本表的创建" class="headerlink" title="基本表的创建"></a>基本表的创建</h3><p>例:建立一个”学生”表Student,由学号Sno,姓名Sname性别Ssex,年龄Sage、所在系Sdept五个属性组成。 其中学号不能为空,值是唯一的,并且姓名取值也唯一。</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">CREATE</span> <span class="keyword">TABLE</span> Student</span><br><span class="line">(Sno <span class="built_in">CHAR</span>(<span class="number">5</span>) <span class="keyword">NOT</span> <span class="literal">NULL</span> <span class="keyword">UNIQUE</span>,<span class="comment">/*列级完整性约束条件,Sno取值唯一,不允许为空*/</span></span><br><span class="line">Sname <span class="built_in">CHAR</span>(<span class="number">20</span>)<span class="keyword">UNIQUE</span>,</span><br><span class="line">Ssex <span class="built_in">CHAR</span>(<span class="number">1</span>),</span><br><span class="line">Sage <span class="built_in">INT</span>,</span><br><span class="line">Sdept <span class="built_in">CHAR</span>(<span class="number">15</span>),</span><br><span class="line">PRIMARY <span class="keyword">KEY</span>(Sno);</span><br><span class="line">);</span><br></pre></td></tr></table></figure>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/*使用CREATE语句创建学生_课程表*/</span></span><br><span class="line"><span class="keyword">CREATE</span> <span class="keyword">TABLE</span> SC</span><br><span class="line">(Sno <span class="built_in">CHAR</span>(<span class="number">5</span>)<span class="keyword">UNIQUE</span>,</span><br><span class="line">Cno <span class="built_in">CHAR</span>(<span class="number">5</span>)<span class="keyword">UNIQUE</span>,</span><br><span class="line">GRADE <span class="built_in">SMALLINT</span>,</span><br><span class="line">PRIMARY <span class="keyword">KEY</span>(Sno,Cno),</span><br><span class="line"><span class="keyword">FOREIGN</span> <span class="keyword">KEY</span>(Sno)PEFERENCES S(Sno),<span class="keyword">FOREIGN</span> <span class="keyword">KEY</span>(Cno)PEFERENCES C(Cno),</span><br><span class="line"><span class="keyword">CHECK</span>((GRADE <span class="keyword">IS</span> <span class="literal">NULL</span>)<span class="keyword">OR</span>(GRADE <span class="keyword">IS</span> <span class="keyword">BETWEEN</span> O <span class="keyword">AND</span> <span class="number">100</span>))</span><br><span class="line"> );</span><br></pre></td></tr></table></figure>
<h3 id="基本表的修改"><a href="#基本表的修改" class="headerlink" title="基本表的修改"></a>基本表的修改</h3><h4 id="新增列"><a href="#新增列" class="headerlink" title="新增列"></a>新增列</h4><ul>
<li>向 Student 表增加 “入学时间” 列,其数据类型为日期型。</li>
</ul>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">ALTER</span> <span class="keyword">TABLE</span> Student <span class="keyword">ADD</span> Scome <span class="built_in">DATE</span>;</span><br></pre></td></tr></table></figure>
<ul>
<li>不论基本表中是否已有数据,新增加的列一律为空值。</li>
</ul>
<h4 id="修改数据类型"><a href="#修改数据类型" class="headerlink" title="修改数据类型"></a>修改数据类型</h4><ul>
<li>将年龄的数据类型改为短字长整数。</li>
</ul>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">ALTER</span> <span class="keyword">TABLE</span> Student <span class="keyword">MODIFY</span> Sage <span class="built_in">SMALLINT</span>;</span><br></pre></td></tr></table></figure>
<h4 id="删除约束"><a href="#删除约束" class="headerlink" title="删除约束"></a>删除约束</h4><ul>
<li>删除学生姓名必须取唯一值的约束。</li>
</ul>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">ALTER</span> <span class="keyword">TABLE</span> Student <span class="keyword">DROP</span> <span class="keyword">UNIQUE</span>(Sname);</span><br></pre></td></tr></table></figure>
<h3 id="基本表的撤销"><a href="#基本表的撤销" class="headerlink" title="基本表的撤销"></a>基本表的撤销</h3><h4 id="删除表"><a href="#删除表" class="headerlink" title="删除表"></a>删除表</h4><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">DROP</span> <span class="keyword">TABLE</span> STUDENT;</span><br></pre></td></tr></table></figure>
<p>基本表定义一旦被删除,表中的数据、在表上建立的索引和视图都将自动的被删除掉。</p>
<h3 id="视图的创建"><a href="#视图的创建" class="headerlink" title="视图的创建"></a>视图的创建</h3><ul>
<li>例:建立信息系学生的视图。</li>
</ul>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">CREATE</span> <span class="keyword">VIEW</span> S_Student</span><br><span class="line"><span class="keyword">AS</span> 	<span class="keyword">SELECT</span> Sho, Sname, Sage</span><br><span class="line">	<span class="keyword">FROM</span> Student</span><br><span class="line">	<span class="keyword">WHERE</span> Sdept=<span class="string">'IS'</span>;</span><br></pre></td></tr></table></figure>
<p>本例中省略了视图 S_Student 的列名，由子查询中SELECT子句中的三个列名组成。</p>
<ul>
<li>例:建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生。</li>
</ul>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">CREATE</span> <span class="keyword">VIEW</span> S_Student</span><br><span class="line"><span class="keyword">AS</span> 	<span class="keyword">SELECT</span> Sno, Sname, Sage</span><br><span class="line">	<span class="keyword">FROM</span> Student</span><br><span class="line">	<span class="keyword">WHERE</span> Sdept=<span class="string">'IS'</span>;</span><br><span class="line"><span class="keyword">WITH</span> <span class="keyword">CHECK</span> <span class="keyword">OPTION</span>;</span><br></pre></td></tr></table></figure>
<ul>
<li><p>视图不仅可以建立在一个基本表上,也可以建立在多个基本表上。</p>
</li>
<li><p>例:建立信息系选修1号课程的学生视图。</p>
</li>
</ul>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">CREATE</span> <span class="keyword">VIEW</span> S_S1</span><br><span class="line"><span class="keyword">AS</span> 	<span class="keyword">SELECT</span> Student Sno, Sname, Grad</span><br><span class="line">	<span class="keyword">FROM</span> Student, SC</span><br><span class="line">	<span class="keyword">WHERE</span> Dept=<span class="string">'IS'</span> <span class="keyword">AND</span> Student.Sno=SC.Sno <span class="keyword">AND</span> SC.Cno=<span class="string">'1'</span></span><br></pre></td></tr></table></figure>
<ul>
<li><p>视图不仅可以建立在一个或多基本表上,也可以建立在一个或多个已定义好的视图上,或建立在基本表与视图上。</p>
</li>
<li><p>例:建立信息系选修1号课程且成绩在90分以上的学生视图。</p>
</li>
</ul>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">CREATE</span> <span class="keyword">VIEW</span> S_S2</span><br><span class="line"><span class="keyword">AS</span> <span class="keyword">SELECT</span> Sno, Sname, Grade</span><br><span class="line"><span class="keyword">FROM</span> S_S1</span><br><span class="line"><span class="keyword">WHERE</span> Grade≥<span class="number">90</span></span><br></pre></td></tr></table></figure>
<h3 id="视图的删除"><a href="#视图的删除" class="headerlink" title="视图的删除"></a>视图的删除</h3><p>删除语句的格式为:</p>
<p>DROP VIEW〈视图名〉</p>
<p>视图删除后视图的定义将从数据字典中删除,所以删除一个视图时要将由该视图导出的其它视图一一删除,否则用户使用时会出错。</p>
<h3 id="索引的创建"><a href="#索引的创建" class="headerlink" title="索引的创建"></a>索引的创建</h3><p>建立索引有利于加快查询速度。用户可以根据应用环境的需要，在基本表上建立一个或多个索引，以提供多种存取路径，加快查找速度。</p>
<ul>
<li>例:为学生-课程数据库中的 STUDENT、 COUSE、SC三个表建立索引。其中STUDENT表按学号升序建立唯一索引, COUSE表按课程号升序建立唯一索引,SC表按学号升序和课程号降序建立唯一索引。</li>
</ul>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">CREATE</span> <span class="keyword">UNIQUE</span> <span class="keyword">INDEX</span> Stusno <span class="keyword">ON</span> Student(Sno);</span><br><span class="line"><span class="keyword">CREATE</span> <span class="keyword">UNIQUE</span> <span class="keyword">INDEX</span> Coucno <span class="keyword">ON</span> Couse(Cno);</span><br><span class="line"><span class="keyword">CREATE</span> <span class="keyword">UNIQUE</span> <span class="keyword">INDEX</span> Scno <span class="keyword">on</span> SC(Sno <span class="keyword">ASC</span>, Cno <span class="keyword">DESC</span>);</span><br></pre></td></tr></table></figure>
<h3 id="索引的删除"><a href="#索引的删除" class="headerlink" title="索引的删除"></a>索引的删除</h3><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">DROP</span> <span class="keyword">INDEX</span> &lt;索引名&gt;</span><br></pre></td></tr></table></figure>
<h3 id="数据查询"><a href="#数据查询" class="headerlink" title="数据查询"></a>数据查询</h3><p>比较常用的查询语句不特别列出。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/e70f80389f3c4ec0s.png" alt="Markdown"></p>
<h4 id="自定义输出列名"><a href="#自定义输出列名" class="headerlink" title="自定义输出列名"></a>自定义输出列名</h4><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> Sname <span class="keyword">NAME</span>、<span class="string">'Year of Birth'</span> BIRTH、<span class="number">2006</span>-Sage BIRTHDAY、</span><br><span class="line">ISLOWER(Sdept) DEPARTMENT</span><br><span class="line"><span class="keyword">FROM</span> Student;</span><br></pre></td></tr></table></figure>
<h4 id="DISTINCT（distinct）-的作用：消除重复行"><a href="#DISTINCT（distinct）-的作用：消除重复行" class="headerlink" title="DISTINCT（distinct） 的作用：消除重复行"></a>DISTINCT（distinct） 的作用：消除重复行</h4><p>如果査询结果包含许多重复的行,要去掉重复行,必须指定 DISTINCT短语</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> <span class="keyword">DISTINCT</span> Sno</span><br><span class="line"><span class="keyword">FROM</span> SC；</span><br></pre></td></tr></table></figure>
<h4 id="确定范围"><a href="#确定范围" class="headerlink" title="确定范围"></a>确定范围</h4><p>例:查询年龄在20~30岁包括20岁和30岁)之间的学生的姓名和年龄。</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> Sname, Sage</span><br><span class="line"><span class="keyword">FROM</span> Student</span><br><span class="line"><span class="keyword">WHERE</span> Sage <span class="keyword">BETWEEN</span> <span class="number">20</span> <span class="keyword">AND</span> <span class="number">30</span>；</span><br></pre></td></tr></table></figure>
<p>例:查询年龄不在20~30岁之间的学生姓名和年龄。</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> Sname, Sage</span><br><span class="line"><span class="keyword">FROM</span> Student</span><br><span class="line"><span class="keyword">WHERE</span> Sage <span class="keyword">NOT</span> <span class="keyword">BETWEEN</span> <span class="number">20</span> <span class="keyword">AND</span> <span class="number">30</span>;</span><br></pre></td></tr></table></figure>
<h4 id="确定集合"><a href="#确定集合" class="headerlink" title="确定集合"></a>确定集合</h4><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">IN ('IS','SS','CS')</span><br><span class="line">NOT IN ('IS','SS','CS')</span><br></pre></td></tr></table></figure>
<h4 id="字符匹配（LIKE）"><a href="#字符匹配（LIKE）" class="headerlink" title="字符匹配（LIKE）"></a>字符匹配（LIKE）</h4><blockquote>
<p>%(百分号)：代表任意长度(长度可为0)的字符串。例如，a%b表示以a开头,以b结尾的任意长度的字符串。</p>
<p>_(下横线)：代表任意单个字符。例如，a_b代表以a开头,b结尾的长度为3的字符串。</p>
</blockquote>
<ul>
<li>如果用户要查询的字符串本身就含有%或,这时就可以使用 ESCAPE ‘&lt;换码字符&gt;’ 短语对通配符进行转义。</li>
</ul>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ESCAPE &apos;\&apos; 短语表示 &apos;\&apos;为换码字符,这样匹配串中紧跟在\后面的字符&quot;_&quot;不再具有通配符的含义,转义为&apos;_&apos;字符。</span><br></pre></td></tr></table></figure>
<p>例:查询DB_ Design课程的课程号和学分。</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> Cno, Ccredit</span><br><span class="line"><span class="keyword">FROM</span> Course</span><br><span class="line"><span class="keyword">WHERE</span> Cname <span class="keyword">LIKE</span> <span class="string">'DB\_Design'</span> ESCAPE <span class="string">'\'</span></span><br></pre></td></tr></table></figure>
<p>例:查询以”DR”开头,且倒数第3个字符为的课程的详细情况</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> *</span><br><span class="line"><span class="keyword">FROM</span> Course</span><br><span class="line"><span class="keyword">WHERE</span> Cname <span class="keyword">LIKE</span> <span class="string">'DB\_%i__'</span> ESCAPE <span class="string">'\'</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">注意:在例20中匹配串DB\%’,只有第一个前面有换码字符,其它的均没有,所以只有第一个被转义称字符“",其它均为通配符</span></span><br></pre></td></tr></table></figure>
<h4 id="涉及空值的查询"><a href="#涉及空值的查询" class="headerlink" title="涉及空值的查询"></a>涉及空值的查询</h4><p>例:某些学生选修课程后没参加考试,所以有选课记录,没有成绩。查询缺少成绩的学生的学号和相应课程号。</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> Sno, Cno</span><br><span class="line"><span class="keyword">FROM</span> SC</span><br><span class="line"><span class="keyword">WHERE</span> Grade <span class="keyword">is</span> <span class="literal">NULL</span>；</span><br></pre></td></tr></table></figure>
<ul>
<li>这里的s不能用“=”号取代。</li>
</ul>
<p>例:查询所有有成绩的学生学号和课程号。</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> Sno, Cno</span><br><span class="line"><span class="keyword">FROM</span> SC</span><br><span class="line"><span class="keyword">WHERE</span> Grade <span class="keyword">is</span> <span class="keyword">NOT</span> <span class="literal">NULL</span></span><br></pre></td></tr></table></figure>
<h4 id="对查询结果排序"><a href="#对查询结果排序" class="headerlink" title="对查询结果排序"></a>对查询结果排序</h4><table><tr><td bgcolor="#C0FF3E">用户可以用 ORDER BY子句对查询结果按照一个或多个属性列的升序（ASC）或降序（DESC）排列,缺省值为升序。</td></tr></table>

<p>例:査询选修了3号课程的学生的学号及其成绩,査询结果按分数的降序排列。</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> Sno, Grade</span><br><span class="line"><span class="keyword">FROM</span> SC</span><br><span class="line"><span class="keyword">WHERE</span> Cno=<span class="number">3</span></span><br><span class="line"><span class="keyword">oRDER</span> <span class="keyword">BY</span> Grade <span class="keyword">DESC</span>；</span><br></pre></td></tr></table></figure>
<p>对于空值按升序排列,含空值的元组将最后显示。若按降序排列,空值的元组将最先显示。</p>
<h4 id="使用集函数"><a href="#使用集函数" class="headerlink" title="使用集函数"></a>使用集函数</h4><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">COUNT() 统计元组个数</span><br><span class="line">SUM() 计算总和</span><br><span class="line">AVG() 计算平均值</span><br><span class="line">MAX() 求一列值中的最大值</span><br><span class="line">MIN() 求一列值中的最小值</span><br></pre></td></tr></table></figure>
<p>例:查询学生总人数。</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> <span class="keyword">COUNT</span>(*)</span><br><span class="line"><span class="keyword">FROM</span> Student;</span><br></pre></td></tr></table></figure>
<p>例:査询选修了课程的学生总人数。</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> <span class="keyword">COUNT</span>(<span class="keyword">DISTINCT</span> Sno)</span><br><span class="line"><span class="keyword">FROM</span> SC;</span><br></pre></td></tr></table></figure>
<h4 id="分组"><a href="#分组" class="headerlink" title="分组"></a>分组</h4><p>GROUP BY子句将査询结果表按某一列或多列值分组,值相等的为一组。对查询结果分组的目的是为了细化集函数的作用对象。</p>
<p>例:求各个课程号及其相应的选课人数</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> Cno, <span class="keyword">COUNT</span>(Sno）</span><br><span class="line"><span class="keyword">FROM</span> SC</span><br><span class="line"><span class="keyword">GROUP</span> <span class="keyword">BY</span> Cno;</span><br></pre></td></tr></table></figure>
<p>该语句对查询结果按Cno值分组,所有具有相同Cno值的元组为一组,然后对每一组使用集函数 COUNT计算。</p>
<p>如果分组后还要按一定的条件对这些组进行筛选,最终只输出满足指定条件的组则可以用 HAVING短语指定筛选。</p>
<p>例:査询选修了3门以上课程的学生学号。</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> Sno</span><br><span class="line"><span class="keyword">FROM</span> SC</span><br><span class="line"><span class="keyword">GROUP</span> <span class="keyword">BY</span> Sno</span><br><span class="line"><span class="keyword">HAVING</span> <span class="keyword">COUNT</span>(*)&gt;<span class="number">3</span>;</span><br></pre></td></tr></table></figure>
<h4 id="带有-ANY-或-ALL-谓词的子查询"><a href="#带有-ANY-或-ALL-谓词的子查询" class="headerlink" title="带有 ANY 或 ALL 谓词的子查询"></a>带有 ANY 或 ALL 谓词的子查询</h4><p>子査询返回单值时可以用比较运算符,而使用ANY或ALL谓词时必须同时使用比较运算符。其一般格式为:</p>
<ul>
<li><p>比较运算符ANY：表示在子査询中满足比较运算符的某个值。</p>
</li>
<li><p>比较运算符ALL：表示在子査询中满足比较运算符的所有值。</p>
</li>
</ul>
<p>例:査询其它系中比信息系某一学生年龄小的学生姓名和年龄</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> Sname, Sage</span><br><span class="line"><span class="keyword">FROM</span> Student</span><br><span class="line"><span class="keyword">WHERE</span> 	Sage&lt;<span class="keyword">ANY</span>(<span class="keyword">SELECT</span> Sage</span><br><span class="line">				<span class="keyword">FORM</span> Student</span><br><span class="line">				<span class="keyword">WHERE</span> Sdept=<span class="string">'IS'</span>)</span><br><span class="line">		<span class="keyword">AND</span> Sdept&lt;&gt;<span class="string">'IS'</span></span><br></pre></td></tr></table></figure>
<h1 id="计算机组成原理与系统结构"><a href="#计算机组成原理与系统结构" class="headerlink" title="计算机组成原理与系统结构"></a>计算机组成原理与系统结构</h1><h2 id="流水线"><a href="#流水线" class="headerlink" title="流水线"></a>流水线</h2><h3 id="流水线概念"><a href="#流水线概念" class="headerlink" title="流水线概念"></a>流水线概念</h3><p>流水线是指在程序执行时多条指令重叠进行操作的一和准并行处理实现技术。各种部件同时处理是针对不同指令而言的,它们可同时为多条指令的不同部分进行工作,以<font color="red">提高各部件的利用率</font>和<font color="red">指令的平均执行速度</font>。</p>
<h3 id="流水线指令运行时间的计算"><a href="#流水线指令运行时间的计算" class="headerlink" title="流水线指令运行时间的计算"></a>流水线指令运行时间的计算</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/fdbd03d77e1ffc70s.png" alt="Markdown"></p>
<blockquote>
<p>例：若指令流水线把一条指令分为取指、分析和执行三部分,且三部分的时间分别是 t(取指)=2ns，t(分析)=2ns，t(执行)=1ns，则100条指令全部执行完毕需（）ns。</p>
<p>计算：(2+2+1)+(100-1)x2=5+198=203</p>
<p>注意：如果考试中，按公式计算选不出答案，得换一种方式算，即以运行时间最长的为基准，把每部分的时间都看成一样的来运算。</p>
</blockquote>
<h3 id="流水线的吞吐率"><a href="#流水线的吞吐率" class="headerlink" title="流水线的吞吐率"></a>流水线的吞吐率</h3><p>指在单位时间内流水线所完成的任务数量或输出的结果数量。</p>
<p>公式：指令总条数/总时间，如上例题计算吞吐率：100/203</p>
<h3 id="流水线的加速比"><a href="#流水线的加速比" class="headerlink" title="流水线的加速比"></a>流水线的加速比</h3><p>完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比称为流水线的加速比。</p>
<p> 可能产生的最大加速比为4。</p>
<h3 id="流水线的效率"><a href="#流水线的效率" class="headerlink" title="流水线的效率"></a>流水线的效率</h3><p>效率 = 吞吐量x △t</p>
<p>效率 = 加速比/k，k为流水线分的级别</p>
<h2 id="高速缓冲存储器"><a href="#高速缓冲存储器" class="headerlink" title="高速缓冲存储器"></a>高速缓冲存储器</h2><h3 id="Cache的概念"><a href="#Cache的概念" class="headerlink" title="Cache的概念"></a>Cache的概念</h3><p>CPU内部对通用寄存器的存取操作是速度最快的，不是 Cache。</p>
<p>★ Cache的功能：提高CPU数据输入输出的速率,调和CPU速度与内存存取速度之间巨大的差异。</p>
<p>★在计算机的存储系统体系中, Cache是访问速度最快的层次。</p>
<p>★使用 Cache改善系统性能的依据是程序的局部性原理。</p>
<h3 id="命中率"><a href="#命中率" class="headerlink" title="命中率"></a>命中率</h3><p>如果以 h 代表对 Cache的访问命中率，t1 表示 Cache的周期时间，t2 表示主存储器周期时间，以读操作为例，使用“ Cache+主存储器”的系统的平均周期为 t3 ，则<br>$$<br>t3=h×t1+(1-h)×t2<br>$$<br>其中,(1-h)又称为失效率(未命中率)。</p>
<p>求出系统的平均周期越短的速度越快。</p>
<p>下面的真题，A~C 选项实际上就是要求出系统的平均周期再进行比较（P为命中率）。</p>
<p>而D,E选项，要求最接近，即 A的平均周期-B的平均周期 的绝对值最小，因此我们可以直接令 A的平均周期-B的平均周期=0 进行计算。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/183c52d2709435d1s.png" alt="Markdown"></p>
<h3 id="Cache-的读写过程"><a href="#Cache-的读写过程" class="headerlink" title="Cache 的读写过程"></a>Cache 的读写过程</h3><p>★写直达：当要写 Cache时,数据同时写回主存储器,有时也称为写通。</p>
<p>★写回：CPU修改 Cache 的某一行后，相应的数据并不立即写人主存储器单元。而是当该行被从 Cache 中淘汰时,才把数据写回到主存储器中。</p>
<p>★标记法：对 Cache 中的每一个数据设置一个有效位。</p>
<h3 id="地址映像"><a href="#地址映像" class="headerlink" title="地址映像"></a>地址映像</h3><p>★常见的映像方法有直接映像、相联映像和组相联映像。</p>
<p>★地址映像是将主存与 Cache的存储空间划分为若干大小相同的页(或称为块)。例如某机的主存容量为1GB,划分为2048页,每页512KB; Cache容量为8MB,划分为16页,每页512KB。</p>
<p>直接映像（分区）</p>
<p>全相联映像（分组）（块冲突概率低，Cache 空间利用率高）</p>
<p>组相联映像（先分区再分组）</p>
<h2 id="内存编址方法"><a href="#内存编址方法" class="headerlink" title="内存编址方法"></a>内存编址方法</h2><p>1个字节 = 8位</p>
<p>1字 = 64位或32位（具体看计算机系统是哪一种）</p>
<h3 id="编址"><a href="#编址" class="headerlink" title="编址"></a>编址</h3><p>3位地址能够有8个空间。（2^3 = 8）</p>
<h3 id="芯片的拼接"><a href="#芯片的拼接" class="headerlink" title="芯片的拼接"></a>芯片的拼接</h3><p>16*4位的芯片（空间数X数据位），即地址线为4（2^4=16），数据线为4。</p>
<h2 id="存储相关计算问题"><a href="#存储相关计算问题" class="headerlink" title="存储相关计算问题"></a>存储相关计算问题</h2><p>计磁数 = (外半径 - 内半径) X 道密度 X  记录面数</p>
<p>注意：硬盘的第一面与最后一面是保护用的，要减掉。如4个双面的盘片的记录面数是4x2-2=6。</p>
<p>非格式化容量位密度ⅹ最内圈直径ⅹ总磁道数</p>
<p>注意:位密度是每道不同的,但每道的容量是相同的。0道是最外面的磁道,其位密度最小。</p>
<p>格式化容量每道扇区数ⅹ扇区容量总磁道数</p>
<p>平均数据传输速率每道扇区数ⅹ扇区容量ⅹ盘片转数</p>
<p>存取时间寻道时间等待时间</p>
<p>注意：寻道时间是指磁头移动到磁道所需的时间；等待时间为等待读写的扇区转到磁头下方所用的时间。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/b75c9ad87bc760e7s.png" alt="Markdown"></p>
<h2 id="数制"><a href="#数制" class="headerlink" title="数制"></a>数制</h2><h3 id="进制转换"><a href="#进制转换" class="headerlink" title="进制转换"></a>进制转换</h3><p>十进制转其他进制：短除法</p>
<p>其他进制转十进制：如（111）2转十进制，为1 X 2^2 + 1 X 2^1 + 1X2^0 = 7(10)</p>
<h3 id="定点整数：原码"><a href="#定点整数：原码" class="headerlink" title="定点整数：原码"></a>定点整数：原码</h3><p>将最高位用做符号位（0表示正数，1表示负数），其余各位代表数值本身的绝对值的表示形式。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/23cb73ad2d97885as.png" alt="Markdown"></p>
<blockquote>
<p>例如：</p>
<p>X = +0110，则 [X]原 = 0 0110；</p>
<p>X = -0110，则 [X]原 = 1 0110；</p>
</blockquote>
<h3 id="定点小数：原码"><a href="#定点小数：原码" class="headerlink" title="定点小数：原码"></a>定点小数：原码</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/8f29af1667d0b6cds.png" alt="Markdown"></p>
<p>定点小数的小数点是固定在最高位和次高位之间，定点整数的小数点是固定在最低位后面。</p>
<blockquote>
<p>例如：</p>
<p>X = +0.1011，则 [X]原 = 0 1011；</p>
<p>X =  -0.1011，则 [X]原 = 1 1011；</p>
</blockquote>
<h3 id="定点整数：反码"><a href="#定点整数：反码" class="headerlink" title="定点整数：反码"></a>定点整数：反码</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/eff699a8e1b69256s.png" alt="Markdown"></p>
<p>正数的反码与原码相同。负数的反码符号位为1,其余各位为该数绝对值的原码按位取反。这个取反的过程使得这种编码称为“反码”。</p>
<blockquote>
<p>例如：</p>
<p>X = +0110，则 [X]原 = 0 0110；</p>
<p>X = -0110，则 [X]原 = 1 1001；</p>
</blockquote>
<h3 id="定点小数：反码"><a href="#定点小数：反码" class="headerlink" title="定点小数：反码"></a>定点小数：反码</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/05d5837d50ad6478s.png" alt="Markdown"></p>
<blockquote>
<p>例如：</p>
<p>X = +0.1011，则 [X]原 = 0 1011；</p>
<p>X =  -0.1011，则 [X]原 = 1 0100；</p>
</blockquote>
<h3 id="定点整数：补码"><a href="#定点整数：补码" class="headerlink" title="定点整数：补码"></a>定点整数：补码</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/4de854991e687862s.png" alt="Markdown"></p>
<p>正数的补码与原码相同。负数的补码是该数的反码加1，这个加1就是“补”。</p>
<blockquote>
<p>例如：</p>
<p>X = +0110，则 [X]原 = 0 0110；</p>
<p>X = -0110，则 [X]原 = 1 1010；</p>
</blockquote>
<h3 id="定点小数：补码"><a href="#定点小数：补码" class="headerlink" title="定点小数：补码"></a>定点小数：补码</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/b81bda54a9d2594as.png" alt="Markdown"></p>
<blockquote>
<p>例如：</p>
<p>X = +0.1011，则 [X]原 = 0 1011；</p>
<p>X =  -0.1011，则 [X]原 = 1 0101；</p>
</blockquote>
<blockquote>
<p>例：用定点补码表示纯小数，采用8位字长。编码1000 0000表示的十进制数是（-1）</p>
<p>[X]补 = 1000 0000，带入公式可求出为 -1 。</p>
</blockquote>
<h3 id="移码"><a href="#移码" class="headerlink" title="移码"></a>移码</h3><p>求移码,只需要把补码的符号位进行取反即可得到。</p>
<blockquote>
<p>例如：</p>
<p>X = +1011,[X]移= 1 1011,符号位1表示正号;</p>
<p>X = -1011,[X]移= 0 0101,符号位“0表示负号。</p>
</blockquote>
<p>注意：移码只用于表示浮点数的阶码,所以只用于整数。</p>
<table><tr><td bgcolor="#C0FF3E">8位二进制原码的表示范围：-127～+127（有+0和-0）</td></tr></table>

<table><tr><td bgcolor="#C0FF3E">8位二进制反码的表示范围：-127～+127（有+0和-0）</td></tr></table>

<table><tr><td bgcolor="#C0FF3E">8位二进制补码的表示范围：-128～+127（只有一个0）</td></tr></table>

<h2 id="校验码"><a href="#校验码" class="headerlink" title="校验码"></a>校验码</h2><h3 id="循环校验码-CRC"><a href="#循环校验码-CRC" class="headerlink" title="循环校验码 CRC"></a>循环校验码 CRC</h3><h4 id="模二除法"><a href="#模二除法" class="headerlink" title="模二除法"></a>模二除法</h4><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/aeada69a46b85bbcs.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/b125b58181b9bd77s.png" alt="Markdown"></p>
<h3 id="海明校验码"><a href="#海明校验码" class="headerlink" title="海明校验码"></a>海明校验码</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/bd94f4128d798d33s.png" alt="Markdown"></p>
<h2 id="计算机的分类"><a href="#计算机的分类" class="headerlink" title="计算机的分类"></a>计算机的分类</h2><h3 id="Flynn-分类法"><a href="#Flynn-分类法" class="headerlink" title="Flynn 分类法"></a>Flynn 分类法</h3><p>单指令流单数据流（SISD）</p>
<p>单指令流多数据流（SIMD）</p>
<p>多指令流单数据流（MISD）</p>
<p>多指令流多数据流（MIMD）</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/7d32e36160fa5f47s.png" alt="Markdown"></p>
<h1 id="网络基础"><a href="#网络基础" class="headerlink" title="网络基础"></a>网络基础</h1><h2 id="网络的相关基础概念"><a href="#网络的相关基础概念" class="headerlink" title="网络的相关基础概念"></a>网络的相关基础概念</h2><h3 id="网络的功能"><a href="#网络的功能" class="headerlink" title="网络的功能"></a>网络的功能</h3><ol>
<li>数据通信</li>
<li>资源共享</li>
<li>负载均衡</li>
<li>高可靠性</li>
</ol>
<h3 id="网络的分类"><a href="#网络的分类" class="headerlink" title="网络的分类"></a>网络的分类</h3><p>广域网（LAN）</p>
<p>城域网（MAN）</p>
<p>局域网（LAN）：以共享网络资源为目的，分布距离10米~1000米</p>
<h3 id="网络的拓扑结构"><a href="#网络的拓扑结构" class="headerlink" title="网络的拓扑结构"></a>网络的拓扑结构</h3><p>总线型拓扑结构：采用单根传输线作为公共的传输通道（CSMA/CD）</p>
<blockquote>
<p>优点 ：扩充性能好，可靠性高，廉价，安装方便</p>
<p>缺点：负载重时，线路的利用率低</p>
</blockquote>
<p>树型拓扑结构：树根接受个站点发送的数据，然后再广播发送到全网</p>
<blockquote>
<p>特性与总线型网路一样。</p>
</blockquote>
<p>星型拓扑结构：以中央结点为中心与各结点连接而组成的</p>
<blockquote>
<p>优点：维护方便，网络延迟时间短</p>
<p>缺点：线路利用率低，中央单元负荷重</p>
</blockquote>
<p>环型拓扑结构：各结点通过环路接口连在一条首尾相连的闭合环形通路</p>
<blockquote>
<p>优点：路径控制简单，可靠性高</p>
<p>缺点：扩充性差，传输效率低，响应速度慢</p>
</blockquote>
<p>网状拓扑结构（分布式结构）</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/bc63bfcaafb262c5s.png" alt="Markdown"></p>
<h2 id="OSI-模型"><a href="#OSI-模型" class="headerlink" title="OSI 模型"></a>OSI 模型</h2><ul>
<li>应用层（直接和用户程序交互的一层）</li>
<li>表示层（对通信双方之间传输的数据做进一步的转换处理，以达到提高通信系统的通信效率和安全性等目的，如数据的加密/解密等）</li>
<li>会话层（会话的同步管理、会话的活动管理等）</li>
<li>传输层（提供无连接或面向连接的服务为基础，为双方的通信进程之间建立直接的端到端的数据传输通道）</li>
<li>网络层（路由，IP 地址）</li>
<li>数据链路层（把来自网络层的数据包按本层协议规定格式打包成数据帧，通过数据链路把帧从一个结点传输到相邻的某个结点）</li>
<li>物理层（实现通信双方之间的非结构化二进制比特流（物理服务数据单元）的传输）</li>
</ul>
<blockquote>
<p>通信子网：物理层、数据链路层、网络层</p>
<p>资源子网：会话层、表示层、应用层</p>
</blockquote>
<h3 id="常见设备在-OSI-模型中所处层次："><a href="#常见设备在-OSI-模型中所处层次：" class="headerlink" title="常见设备在 OSI 模型中所处层次："></a>常见设备在 OSI 模型中所处层次：</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/4dc88e7c0773bb57s.png" alt="Markdown"></p>
<h3 id="OSI-中的信息流向"><a href="#OSI-中的信息流向" class="headerlink" title="OSI 中的信息流向"></a>OSI 中的信息流向</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/216c867ed05d7ec9s.png" alt="Markdown"></p>
<h2 id="TCP-IP-协议族"><a href="#TCP-IP-协议族" class="headerlink" title="TCP/IP 协议族"></a>TCP/IP 协议族</h2><ul>
<li>应用层（各种应用层协议）：为用户接口提供服务，如用于文件传输的FTP协议、HTTP协议、用于电子邮件的SMTP和POP3协议</li>
<li>传输层（TCP或UDP）：TCP面向连接，可靠的传输服务。UDP相反。</li>
<li>网际层（IP）：点到点的数据传输服务。数据传送的过程中能够选择合适的路由和结点。IP、ICMP、ARP和RARP等。</li>
<li>网络接口层</li>
</ul>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/92fca95a35b213e6s.png" alt="Markdown"></p>
<h3 id="常用协议"><a href="#常用协议" class="headerlink" title="常用协议"></a>常用协议</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/1ec525d5306476b2s.png" alt="Markdown"></p>
<p>ARP协议：将 IP 地址转成 MAC 地址。</p>
<h3 id="常用端口知识"><a href="#常用端口知识" class="headerlink" title="常用端口知识"></a>常用端口知识</h3><p>(1) 公共服务保留端口( Well known Ports):从0到1023</p>
<blockquote>
<ul>
<li>例如:</li>
<li>20是FTP的默认数据端口</li>
<li>21是FTP的默认控制口</li>
<li>SMTP的默认端口是25</li>
<li>80端口是HTTP通讯端口</li>
<li>POP3的默认端口是110</li>
<li>119 NNTP news新闻组传输协议</li>
</ul>
</blockquote>
<p>(2) 注册端口( Registered Ports):从1024到49151。</p>
<p>(3) 动态和或私有端口( Dynamic andlor Private Ports):从49152到65535。</p>
<p>ED|FAcT( EDI for Administration, Commerce and Transport)是多行业(行政、商业和运输)电子数据互换标准。</p>
<p>HDLc(High- evel Data Link Contro)是高级数据链路控制。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/4267a662060d9a44s.png" alt="Markdown"></p>
<h2 id="IP-地址的分类及子网的划分"><a href="#IP-地址的分类及子网的划分" class="headerlink" title="IP 地址的分类及子网的划分"></a>IP 地址的分类及子网的划分</h2><h3 id="IP-地址的分类"><a href="#IP-地址的分类" class="headerlink" title="IP 地址的分类"></a>IP 地址的分类</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/24480aa2bc82340as.png" alt="Markdown"></p>
<h3 id="子网掩码的概念及子网划分"><a href="#子网掩码的概念及子网划分" class="headerlink" title="子网掩码的概念及子网划分"></a>子网掩码的概念及子网划分</h3><p>子网掩码的长度与形式都与|P地址一致</p>
<p>子网掩码的提出,是为了区分|P地址中的网络号和主机号。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/3a2818736a0becbas.png" alt="Markdown"></p>
<p>子网的划分：</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/3b126903fd3ba0b8s.png" alt="Markdown"></p>
<h2 id="传输介质"><a href="#传输介质" class="headerlink" title="传输介质"></a>传输介质</h2><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/b496f3d209028ad4s.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/6da9dcf0745fb0f3s.png" alt="Markdown"></p>
<h2 id="常用网络应用"><a href="#常用网络应用" class="headerlink" title="常用网络应用"></a>常用网络应用</h2><h3 id="WWW——万维网"><a href="#WWW——万维网" class="headerlink" title="WWW——万维网"></a>WWW——万维网</h3><p>在WWW中,依赖于标准化的统一资源定位器URL( uniformresource locator)地址来定位信息的内容。在进行页面访问时采用超文本传送协议HTTP(hypertexttransferprotocol),其服务端口就是HTTP服务端口(80端口)。首先,浏览器软件与HTTP端口建立一个TCP连接,然后发送GET命令,Web服务器根据命令取出文档,发送给浏览器;浏览器释放连接,显示文档。</p>
<h3 id="E-Mail——电子邮件"><a href="#E-Mail——电子邮件" class="headerlink" title="E-Mail——电子邮件"></a>E-Mail——电子邮件</h3><p>电子邮件是现在数据量、使用量最大的一个互联网应用,它用来完成人际之间的消息通信。与它相关的有以下三个协议:</p>
<ol>
<li>SMTP：简单邮件传送协议,用于邮件的发送,工作在25号端口上</li>
<li>POP3：邮局协议V3.0,用于接收邮件,工作在110号端口上</li>
<li>IMAP：邮件访问协议,是用于替代POP3协议的新协议,工作在143号端口上。</li>
</ol>
<h3 id="DNS——域名解析协议"><a href="#DNS——域名解析协议" class="headerlink" title="DNS——域名解析协议"></a>DNS——域名解析协议</h3><p>网络用户希望用有意义的名字来标识主机,而不是|P地址。为了解决这个需求,应运而生了一个域名服务系统DNS(工作在53号端口)。它是运行在TCP协议之上,负责将域名转换成实际相对应的P地址,从而在不改变底层协议的寻址方法的基础上,为使用者提供一个直接使用符号名来确定主机的平台。</p>
<p>DNS是一个分层命名系统,名字由若干个标号组成,标号之前用圆点分隔。最右边的是主域名,最左边的是主机名,中间的是子域名。例如:xinu.Cs. purdue. edu中,Ⅺnu是主机名、cs、 purdue是子域名(分别代表计算机系、普渡大学)、edu是主域名。可以看出一个域名可以由几个段组成,那么它们是怎样被赋值的呢?它是由国际域名管理机构lnη terNi来制。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/47f023d6c1ed4aacs.png" alt="Markdown"></p>
<h3 id="FTP——文件传输协议"><a href="#FTP——文件传输协议" class="headerlink" title="FTP——文件传输协议"></a>FTP——文件传输协议</h3><p>FTP的传输模式包括:Bin(二进制)和AsC(文本文件)两种,除了文本文件之外,都应该使用二进制模式传输。</p>
<p>FTP应用的连接模式:在客户机和服务器之间需建立两条TCP连接,条是用于传送控制信息(21端口),一条则是用于传送文件内容(20端口)。</p>
<p>匿名FTP的用户名为 anonymous。</p>
<h1 id="安全性、可靠性及系统性能评价"><a href="#安全性、可靠性及系统性能评价" class="headerlink" title="安全性、可靠性及系统性能评价"></a>安全性、可靠性及系统性能评价</h1><h2 id="系统可靠性"><a href="#系统可靠性" class="headerlink" title="系统可靠性"></a>系统可靠性</h2><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/0775fbf7e19dee45s.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/25f07d4c99bc779ds.png" alt="Markdown"></p>
<h2 id="数据安全与保密"><a href="#数据安全与保密" class="headerlink" title="数据安全与保密"></a>数据安全与保密</h2><h3 id="对称加密技术"><a href="#对称加密技术" class="headerlink" title="对称加密技术"></a>对称加密技术</h3><p>对此加密技术：是 指加密系统的<font color="red">加密密钥和解密密码相同</font>。或者虽然不同，但从其中的任意一个可以很容易地推导出另一个。</p>
<p><strong>常见对称密钥加密算法</strong></p>
<p><strong>DES</strong>(数据加密标准算法)：DES主要采用<strong>替换和移位</strong>的方法加密。它用56位(64位密钥只有56位有效密钥)密钥对64位二进制数据块进行加密,每次加密可对64位的输入数据进行16轮编码,经一系列替换和移位后,输入的64位原始数据转换成完全不同的64位输出数据。</p>
<p>优点：加密速度快，密钥产生容易。</p>
<p>3DES(三重DES)：在DES的基础上采用三重DES,即用两个56位的密钥K1、K2,发送方用K1加密,K2解密,再使用K1加密。接收方则使用K1解密,K2加密,再使用K1解密,其效果相当于将密钥长度加倍。</p>
<p>RC-5(Rivest cipher 5)RC5是由 Ron rivest(公钥算法的创始人之一)在1994年开发出来的。RC5是在RCF2040中定义的,RSA数据安全公司的很多产品都使用了RC-5。</p>
<p>IDEA算法:其明文和密文都是64位,密钥长度为128位。它比DES的加密性好,而且对计算机功能要求也没有那么高。DEA加密标准由PGP( PrettyGood Privacy)系统使用。</p>
<h3 id="非对称加密技术"><a href="#非对称加密技术" class="headerlink" title="非对称加密技术"></a>非对称加密技术</h3><p>RSA 算法</p>
<h2 id="信息摘要"><a href="#信息摘要" class="headerlink" title="信息摘要"></a>信息摘要</h2><p>信息摘要算法实际上就是一个单向散列函数。数据块经过单向散列函数得到一个固定长度的散列值,攻击者不可能通过散列值而编造数据块,使得编造的数据块的散列值和原数据块的散列值相同。</p>
<p>常用的消息摘要算法有MD5，SHA等,市场上广泛使用的MD5，SHA算法的散列值分别为 128 和 160 位,由于SHA通常采用的密钥长度较长,因此安全性高于MD5。</p>
<h2 id="数字签名"><a href="#数字签名" class="headerlink" title="数字签名"></a>数字签名</h2><p>在书面文件上签名是确认文件的一种手段,其作用有两点:</p>
<p>第一,因为自己的签名难以认,从而确认了文件已签署这一事实</p>
<p>第二,因为签名不易仿冒,从而确定了文件是真的这一手实。</p>
<h2 id="数字时间戳技术"><a href="#数字时间戳技术" class="headerlink" title="数字时间戳技术"></a>数字时间戳技术</h2><p>数字时间戳技术是数字签名一种变种的应用。</p>
<p>在电子商务交易文件中,时间是十分重要的信息。数字时间戳服务 Digital TimeStamp Service,DTS)是网上电子商务安全服务项目之一,能提供电子文件的日期和时间信息的安全保护。</p>
<p>时间戳( time-stamp)是一个经加密后形成的凭证文档,它包括3个部分:</p>
<p>1）需加时间戳的文件的摘要( digest)。</p>
<p>2）DTS收到文件的日期和时间。</p>
<p>3）DTS的数字签名。</p>
<h2 id="SSL-安全协议"><a href="#SSL-安全协议" class="headerlink" title="SSL 安全协议"></a>SSL 安全协议</h2><p>SSL安全协议最初是由 Netscape Communication公司设计开发的,又叫安全套接层( Secure Sockets Layer)协议”,主要用于提高应用程序之间数据的安圣系数。SSL协议的整个概念可以被总结为：一个保证任何安装了安全套接字的客户和服务器间事务安全的协议,它涉及所有TCP/P应用程序。</p>
<p>（1）SSL安全协议主要提供的服务</p>
<ol>
<li>用户和服务器的合法性认证。</li>
<li>加密数据以隐藏被传送的数据。</li>
<li>保护数据的完整性。</li>
</ol>
<p>（2）SSL安全协议实现的过程</p>
<ol>
<li>SSL安全协议是一个保证计算机通信安全的协议,对通信对话过程进行安全保护,其实现过程主要经过如下几个阶段。</li>
<li>接通阶段:客户机通过网络向服务器打招呼,服务器回应。</li>
<li>密码交换阶段:客户机与服务器之间交换双方认可的密码,一般选用RSA密码算法,也有的选用 Diffie- Hellmanηf和 Fortezza-KEA密码算法。</li>
<li>会谈密码阶段:客户机与服务器间产生彼此交谈的会谈密码</li>
<li>检验阶段:客户机检验服务器取得的密码。</li>
<li>客户认证阶段:服务器验证客户机的可信度。</li>
<li>结束阶段:客户机与服务器之间相互交换结束的信息。</li>
</ol>
<h2 id="网络安全"><a href="#网络安全" class="headerlink" title="网络安全"></a>网络安全</h2><p>网络安全受到威胁的原因:</p>
<ol>
<li>网络上存在秘密信息</li>
<li>网络系统存在缺阳</li>
<li>传输可控性差</li>
<li>网络协议存在不完善的地方</li>
</ol>
<p>信息存储安全如何保障:</p>
<ol>
<li>用户的标识与验证</li>
<li>用户存取权限控制</li>
<li>系统安全监控</li>
<li>计算机病毒防治</li>
<li>数据加密</li>
</ol>
<p>信息传输加密:</p>
<ol>
<li>链路加密</li>
<li>节点加密</li>
<li>端-端加密</li>
</ol>
<h3 id="VPN-技术"><a href="#VPN-技术" class="headerlink" title="VPN 技术"></a>VPN 技术</h3><h3 id="防火墙"><a href="#防火墙" class="headerlink" title="防火墙"></a>防火墙</h3><p>类型：</p>
<ol>
<li>包过滤防火墙（应用于网络层，无法防范黑客的攻击）</li>
<li>应用代理网关防火墙</li>
<li>状态检测技术防火墙</li>
</ol>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/5a21daa91029966bs.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/d8ea21d1f7172f91s.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/ce4a4beb10eb6facs.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/34dadd43998e7bcas.png" alt="Markdown"></p>
<h1 id="标准化"><a href="#标准化" class="headerlink" title="标准化"></a>标准化</h1><h2 id="基本概念-2"><a href="#基本概念-2" class="headerlink" title="基本概念"></a>基本概念</h2><p>标准：对重复性的事务和概念所做的统一规定。以科学、技术和实践经验的综合成果为基础,经有关方面协商一致,由一个公认机构批准,以特定形式发布,作为共同遵守的准则和依据。</p>
<p>标准化：是指在经济、技术、科学及管理等社会实践中,对重复性事物的概念通过制订、发布和实施标准达到统一,以获得最佳秩序和社会效益的活动。它是一门综合性学科,具有综合性、政策性和统一性的特点。</p>
<p>标准化的过程：一般包括标准产生(调查、研究、形成草案、批准发布)、标准实施(宣传、普及、监督、咨询)和标准更新(复审、废止或修订)三个子过程。</p>
<p>标准化的实质和目的是什么？</p>
<ul>
<li>通过制定、发布和实施标准,达到统 是标准化的实质。</li>
<li>获得最佳秩序和社会效益 则是标准化的目的。</li>
</ul>
<p>标准化的对象是什么？</p>
<ul>
<li>在国民经济的各个领域中,凡具有多次重复使用和需要制定标准的具体产品,以及各种定额、规划、要求、方法、概念等,都可称为标准化对象。</li>
</ul>
<p>标准化对象一般可分为两大类:</p>
<ul>
<li>一类是标准化的具体对象,即需要制定标准的具体事物;</li>
<li>另一类是标准化总体对象,即各种具体对象的总和所构成的整体,</li>
</ul>
<p>制定标准的原则是什么？</p>
<p>制定标准应遵循的原则是:</p>
<ol>
<li>要从全局利益出发,认真贯彻国家技术经济政策;</li>
<li>充分满足使用要求</li>
<li>有利于促进科学技术发展</li>
</ol>
<p>制定标准要经过哪几个阶段？</p>
<p>一项标准的出台一般要经过六个阶段:</p>
<ul>
<li>第一阶段,申请阶段;</li>
<li>第四阶段,审査阶段</li>
<li>第二阶段,预备阶段;</li>
<li>第五阶段,批准阶段;</li>
<li>第三阶段,委员会阶段;</li>
<li>第六阶段,发布阶段</li>
</ul>
<p><strong>标准的更新</strong></p>
<p>1.标准复审</p>
<p>根据我国《国家标准管理办法》的规定:国家标准实施后,应当根据科学技术的发展和经济建设的需要,由该国家标准的主管部门组织有关单位适时进行复审,复审周期一般不超过五年。</p>
<p>2.标准确认</p>
<p>只在标准再版时在标准封面写明*年确认的字样即可。</p>
<p>3.标准修订</p>
<p>修订后的标准,标准号不变,年号更新为修订版发布时的年份。</p>
<p><strong>标准的编号</strong></p>
<p>国际、国外标准代号及编号:标准代号+专业类号+顺序号+年代号。</p>
<p>我国标准代号及编号:</p>
<ul>
<li>强制性国家标准代号为GB</li>
<li>推荐性国家标准代号为GBT</li>
<li>行业标准代号由汉语拼音大写字母组成(如航天QJ,电子SJ,机械JB、金融JR)</li>
<li>地方标准代号由大写汉语拼音DB加上省级行政区划代码的前两位。</li>
<li>企业标准代号由“Q加上企业代号组成。</li>
</ul>
<h2 id="常见标准化组织"><a href="#常见标准化组织" class="headerlink" title="常见标准化组织"></a>常见标准化组织</h2><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/acf48dd3865474b2s.png" alt="Markdown"></p>
<h2 id="我国的标准分类"><a href="#我国的标准分类" class="headerlink" title="我国的标准分类"></a>我国的标准分类</h2><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/4cbe5f820f914107s.png" alt="Markdown"></p>
<h1 id="面向对象技术"><a href="#面向对象技术" class="headerlink" title="面向对象技术"></a>面向对象技术</h1><h2 id="基本概念-3"><a href="#基本概念-3" class="headerlink" title="基本概念"></a>基本概念</h2><p><strong>对象</strong>：对象( object)是系统中用来描述客观事物的一个实体,它是构成系统的个基本单位。</p>
<p><strong>对象三要素</strong>：对象标识、属性和方法。</p>
<p><strong>封装</strong>( encapsulation)是对象的一个重要原则。</p>
<p>它有两层含义:</p>
<ul>
<li>第一,对象是其全部属性和全部服务紧密结合而形成的一个不可分割的整体</li>
<li>第二,对象是一个不透明的黑盒子,表示对象状态的数据和实现操作的代码都被封装在黑盒子里面。</li>
</ul>
<p><strong>类</strong>：对具有相同属性和服务的一个或一组对象的抽象。类与对象是抽象描述和具体实例的关系,一个具体的对象被称作类的一个实例。类属是一种参数多态机制。</p>
<p><strong>继承与泛化</strong>：继承是面向对象方法中重要的概念,用来说明特殊类(子类)，与一般类(父类)的关系,通常使用泛化来说明一般类与特殊类之间的关系它们之间是一对多关系。</p>
<p><strong>多态性与重载</strong>：多态(即多种形式)性则是指一般类中定义的属性或服务被特殊类继承后,可以具有不同的数据类型或表现出不同的行为,通常是使用重载和改写两项技术来实现的。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/c3f96356aae4f1c8s.png" alt="Markdown"></p>
<p><strong>消息和消息通信</strong>：消息就是向对象发出的服务请求,它通常包括提供服务的对象标识、消息名、输入信息和回答信息。消息通信则是面向对象方法学中的个重要原则,它与对象的封装原则密不可分,为对象间提供了惟一合法的动态联系的途径。</p>
<p><strong>面向对象方法学的优点</strong>:</p>
<ol>
<li>与人类习惯的思维方法一致</li>
<li>稳定性好</li>
<li>可重用性好</li>
<li>较易开发大型软件产品</li>
<li>可维护性好</li>
</ol>
<h2 id="OOA-OOD"><a href="#OOA-OOD" class="headerlink" title="OOA/OOD"></a>OOA/OOD</h2><p><strong>OOA</strong> 模型由5个层次和五个活动组成。</p>
<p>五个层次分别是：<strong>主题、对象类、结构、属性和服务</strong>。</p>
<p>五个活动是<strong>标识对象类、标识结构与关联、划分主题、定义属性、定义服务</strong>。</p>
<p>此外,在 OOA 中还定义了两种对象类之间的结构：<strong>分类结构和组装结构</strong>。</p>
<p><strong>OOD</strong></p>
<p>它由人机交互部件、问题域部件、任务管理部件、数据管理部件四个部分组成，其主要的活动就是这四个部件的设计工作。</p>
<h2 id="Booch方法"><a href="#Booch方法" class="headerlink" title="Booch方法"></a>Booch方法</h2><p>Booch认为软件开发是一个螺旋上升的过程。在这个螺旋上升的每个周期中,有以下几个步骤</p>
<p>发现类和对象</p>
<p>确定它们的含义</p>
<p>找出它们之间的相互关系</p>
<p>说明每一个类和对象的界面和实现</p>
<table>
<thead>
<tr>
<th></th>
<th>静态模型</th>
<th>动态模型</th>
</tr>
</thead>
<tbody>
<tr>
<td>逻辑模型</td>
<td>类图、对象图</td>
<td>状态装换图、时序图</td>
</tr>
<tr>
<td>物理模型</td>
<td>模块图、进程图</td>
</tr>
</tbody>
</table>
<h2 id="OMT方法"><a href="#OMT方法" class="headerlink" title="OMT方法"></a>OMT方法</h2><p>OMT 定义了三种模型：对象模型、动态模型和功能模型。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/3ba13956eb7f0593s.png" alt="Markdown"></p>
<p>进行 OMT 建模时的四个活动：分析、系统设计、对象设计和实现。</p>
<h2 id="面向对象程序设计"><a href="#面向对象程序设计" class="headerlink" title="面向对象程序设计"></a>面向对象程序设计</h2><h3 id="this-指针的使用"><a href="#this-指针的使用" class="headerlink" title="this 指针的使用"></a>this 指针的使用</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/0cd0663e632221b9s.png" alt="Markdown"></p>
<h3 id="继承成员访问控制机制"><a href="#继承成员访问控制机制" class="headerlink" title="继承成员访问控制机制"></a>继承成员访问控制机制</h3><p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/e064f0cb04069397s.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/502f7adf2430ff68s.png" alt="Markdown"></p>
<h2 id="设计模式"><a href="#设计模式" class="headerlink" title="设计模式"></a>设计模式</h2><h3 id="设计模式的要素"><a href="#设计模式的要素" class="headerlink" title="设计模式的要素"></a>设计模式的要素</h3><ol>
<li>模式名称</li>
<li>问题</li>
<li>解决方案</li>
<li>效果</li>
</ol>
<h3 id="设计模式的分类"><a href="#设计模式的分类" class="headerlink" title="设计模式的分类"></a>设计模式的分类</h3><p>模式分类的两条原则：</p>
<ol>
<li>目的（创建型、结构型、行为型）</li>
<li>范围（类、对象）</li>
</ol>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/111bbd9c510a31d7s.png" alt="Markdown"></p>
<p><strong>怎样使用设计模式？</strong></p>
<ol>
<li>大致浏览一遍模式</li>
<li>回头研究结构部分、参与者部分和协作部分</li>
<li>看代码示例部分,看看这个模式代码形式的具体例子</li>
<li>选择模式参与者的名字,使它们在应用上下文中有意义</li>
<li>定义类</li>
<li>定义模式中专用于应用的操作名称</li>
<li>实现执行模式中责任和协作的操作</li>
</ol>
<p><strong>模式设计中用到的几个重要思想理念</strong></p>
<ol>
<li>对接口编程,而不对实现编程</li>
<li>对类的功能的扩展,要多用组合,少用继承</li>
</ol>
<p><strong>对类的功能的扩展,要多用组合,少用继承。</strong></p>
<p>原因:</p>
<ol>
<li>子类对父类的继承是全部的公有和受保护的继承,这使得子类可能继承了对子类无用甚至有害的父类的方法。换句话说,子类只希望继承父类的一部分方法,怎么办?</li>
<li>实际的对象千变万化,如果每一类的对象都有他们自己的类,尽管这些类都继承了他们的父类,但有些时候还是会造成类的无限膨胀。</li>
<li>继承的子类,实际上需要编译期确定下来,这满足不了需要在运行内才能确定对象的情况。而组合却可以比继承灵活得多,可以在运行期才决定某个对象。</li>
</ol>
<h3 id="创建型模式"><a href="#创建型模式" class="headerlink" title="创建型模式"></a>创建型模式</h3><h3 id="结构型模式"><a href="#结构型模式" class="headerlink" title="结构型模式"></a>结构型模式</h3><h3 id="行为型模式"><a href="#行为型模式" class="headerlink" title="行为型模式"></a>行为型模式</h3><h1 id="知识产权"><a href="#知识产权" class="headerlink" title="知识产权"></a>知识产权</h1><p><strong>以下形为都为侵权行为:</strong></p>
<ol>
<li>未经著作权人许可,发表其作品的</li>
<li>未经合作作者许可,将与他人合作创作的作品当作自己单独创作的作品发表的;</li>
<li>没有参加创作,为谋取个人名利,在他人作品上署名的;</li>
<li>歪曲、篡改他人作品的;</li>
<li>剽窃他人作品的;</li>
<li>未经著作权人许可,以展览、摄制电影和以类似摄制电影的方法使用作品,或者以改编、翻译、注释等方式使用作品的,本法另有规定的除外;</li>
<li>使用他人作品,应当支付报酬而未支付的;</li>
<li>未经电影作品和以类似摄制电影的方法创作的作品、计算机软件、录音录像制品的著作权人或者与著作权有关的校利人许可,出租其作品或者录音录像制品的,本法另有规定的除外</li>
<li>未经出版者许可,使用其出版的图书、期刊的版式设计的;</li>
<li>未经表演者许可,从现场直播或者公开传送其现场表演,或者录制其表演的;</li>
<li>其他侵犯著作权以及与著作权有关的权益的行为。</li>
</ol>
<p><strong>软件著作权自软件开发完成之日起产生</strong></p>
<p>自然人的软件著作权,保护期为自然人终生及其死亡后50年,截止于自然人死亡后第50年的12月31日;软件是合作开发的,截止于最后死亡的自然人死亡后第50年的12月31日。</p>
<p>法人或者其他组织的软件著作权,保护期为50年,截止于软件首次发表后第50年的12月31日,但软件自开发完成之日起50年内未发表的,本条例不再保护。</p>
<p><strong>有下列侵权行为的,应当根据情况,承担停止侵害、消除影响、赔礼道歉、赔偿损失等民事责任：</strong></p>
<ol>
<li>未经软件著作权人许可,发表或者登记其软件的;</li>
<li>将他人软件作为自己的软件发表或者登记的</li>
<li>未经合作者许可,将与他人合作开发的软件作为自己单独完成的软件发表或者登记的</li>
<li>在他人软件上署名或者更改他人软件上的署名的;</li>
<li>未经软件著作权人许可,修改、翻译其软件的;</li>
<li>其他侵犯软件著作权的行为</li>
</ol>
<p><strong>商标法第十九条</strong></p>
<p>两个或者两个以上的申请人,在同一种商品或者类似商品上,分别以相同或者近似的商标在同一天申请注册的,各申请人应当自收到商标局通知日起30日内提交具甲请注卅前在先使用该商标的证据。同日使用或者均未使用的,各申请人可以自收到商标局通知之日起30日内自行协商,并将书面协说报送商标局;不愿协商或者协商不成的,商标局通知各申请人以抽签的方式确定一个申请人,驳回其他人的注册申请。商标局已经通知但申请人未参加抽签的,视为放弃申请,商标局应当书面通知未参加抽签的申请人。</p>
<p><strong>商标法第三十七条</strong></p>
<p>注册商标的有效期为十年，自核准注册之日起计算。</p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/ba52dd367f2dd7f2s.png" alt="Markdown"></p>
<p><img src="https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/blog/soft_exam/71ee15798c469688s.png" alt="Markdown"></p>
<h1 id="多媒体"><a href="#多媒体" class="headerlink" title="多媒体"></a>多媒体</h1><h2 id="媒体的分类"><a href="#媒体的分类" class="headerlink" title="媒体的分类"></a>媒体的分类</h2><ol>
<li>感觉媒体</li>
<li>表示媒体（图像编码、文本编码、声音编码等）</li>
<li>表现媒体（键盘、鼠标、扫描仪、显示器等）</li>
<li>交换媒体（存储媒体和传输媒体）</li>
</ol>
<h2 id="多媒体的特征"><a href="#多媒体的特征" class="headerlink" title="多媒体的特征"></a>多媒体的特征</h2><ol>
<li>多样性</li>
<li>集成性</li>
<li>交互性</li>
<li>非线性</li>
<li>实时性</li>
<li>信息使用的方便性</li>
<li>信息结构的动态性</li>
</ol>
<h2 id="虚拟现实技术"><a href="#虚拟现实技术" class="headerlink" title="虚拟现实技术"></a>虚拟现实技术</h2><h3 id="概念"><a href="#概念" class="headerlink" title="概念"></a>概念</h3><p>虚拟现实是将现实世界的多维信息映射到计算机的数字空间生成相应的虚拟世界。</p>
<h3 id="分类"><a href="#分类" class="headerlink" title="分类"></a>分类</h3><ol>
<li>桌面虚拟现实</li>
<li>完全沉浸的虚拟现实</li>
<li>增强现实性的虚拟现实</li>
<li>分布式虚拟现实</li>
</ol>
<h2 id="声音"><a href="#声音" class="headerlink" title="声音"></a>声音</h2><p>声音信号的两个基本参数是<font color="red">幅度和频率</font>。幅度是指声波的振幅，通常用声压级表示，计量单位是分贝（dB）。频率是指声波每秒钟变化的次数，用 Hz 表示。</p>
<p>人耳能听到的声音信号的频率范围是20Hz~20kHz。小于20Hz的声波信号称为亚音信号（次声波）。大于20kHz的声波信号称为超音频信号（超声波）。</p>
<h2 id="声音文件格式"><a href="#声音文件格式" class="headerlink" title="声音文件格式"></a>声音文件格式</h2><ul>
<li>.wav</li>
<li>.snd</li>
<li>.au</li>
<li>.aif</li>
<li>.voc</li>
<li>.mp3</li>
<li>.ra</li>
<li>.mid、.rmi</li>
</ul>
<h2 id="颜色"><a href="#颜色" class="headerlink" title="颜色"></a>颜色</h2><h3 id="颜色的三要素"><a href="#颜色的三要素" class="headerlink" title="颜色的三要素"></a>颜色的三要素</h3><ul>
<li>色调。指颜色的类别。</li>
<li>饱和度。指某一颜色的深浅程度（或浓度）。</li>
<li>亮度。描述光作用于人眼时引起的明暗程度感觉，是指彩色明暗深浅程度。</li>
</ul>
<h3 id="三基色"><a href="#三基色" class="headerlink" title="三基色"></a>三基色</h3><p>红色、绿色、蓝色</p>
<h3 id="颜色模型"><a href="#颜色模型" class="headerlink" title="颜色模型"></a>颜色模型</h3><ul>
<li>RGB颜色模型，自发光的彩色显示器。</li>
<li>CMY颜色模型（青色、品红色、黄色），打印机。</li>
<li>YUV颜色模型。</li>
</ul>
<h2 id="图形和图像"><a href="#图形和图像" class="headerlink" title="图形和图像"></a>图形和图像</h2><h3 id="概念-1"><a href="#概念-1" class="headerlink" title="概念"></a>概念</h3><p>图形。由矢量表示的图形是用一系列计算机指令来描述和记录的一幅图的内容。编辑矢量图的软件通常称为绘图软件。</p>
<p>图像。图像是指用像素点来描述的图。（二值图像、灰度图像、彩色图像）</p>
<h3 id="图像的属性"><a href="#图像的属性" class="headerlink" title="图像的属性"></a>图像的属性</h3><h4 id="分辨率"><a href="#分辨率" class="headerlink" title="分辨率"></a>分辨率</h4><p>分为图像分辨率和现实分辨率</p>
<p>图像分辨率大于显示分辨率时，在屏幕上只能显示部分图像；图像分辨率小于希纳是分辨率时，图像只占屏幕的一部分。</p>
<p>例如：用200dpi来扫描一幅2x2.5英寸的彩色照片，可以得到一幅400x500个像素点的图像。</p>
<h4 id="像素深度"><a href="#像素深度" class="headerlink" title="像素深度"></a>像素深度</h4><p>像素深度是指存储每个像素所用的二进制位数，它也是用来度量图像的色彩分辨率的。</p>
<p>例如：像素的深度为10位，每个像素可以是2^10中颜色中的一种。表示一个像素的位数越多，它能表达的颜色数目就越多，它的深度也就越深。</p>
<h3 id="真彩色和伪彩色"><a href="#真彩色和伪彩色" class="headerlink" title="真彩色和伪彩色"></a>真彩色和伪彩色</h3><p>真彩色是指组成一幅彩色图像的每个像素值中由R、G、B3个基色分量，每个基色分量直接决定显示设备的基色强度。例如，R、G、B分量都用8位来表示，可生成的颜色数，就是2^24种。图像的压缩</p>
<h3 id="图像的压缩编码"><a href="#图像的压缩编码" class="headerlink" title="图像的压缩编码"></a>图像的压缩编码</h3><p>计算数据量公式：</p>
<p>图像数据量 = 图像的总像素数 x 像素深度 / 8（Byte）</p>
<p>例如，一幅640x480的256色图像，其数据量为：640x480X8/8 = 300KB</p>
<h3 id="图像文件格式"><a href="#图像文件格式" class="headerlink" title="图像文件格式"></a>图像文件格式</h3><ul>
<li>.bmp</li>
<li>.gif</li>
<li>.tif</li>
<li>.pcx</li>
<li>.png</li>
<li>.jpg（JPEG）</li>
<li>.wmf</li>
</ul>
<h1 id="数据流图设计"><a href="#数据流图设计" class="headerlink" title="数据流图设计"></a>数据流图设计</h1><h1 id="百度资源"><a href="#百度资源" class="headerlink" title="百度资源"></a>百度资源</h1><p>链接: <a href="https://pan.baidu.com/s/1zPJIWeo6_WBJCfsGdd5GhA" target="_blank" rel="noopener">https://pan.baidu.com/s/1zPJIWeo6_WBJCfsGdd5GhA</a> 提取码: fgm2 </p>

      
    </div>

    

    
    
    

    <div>
      
        
<div class="my_post_copyright">
  <script src="//cdn.bootcss.com/clipboard.js/1.5.10/clipboard.min.js"></script>
  
  <!-- JS库 sweetalert 可修改路径 -->
  <script src="https://cdn.bootcss.com/jquery/2.0.0/jquery.min.js"></script>
  <script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
  <p><span>本文标题:</span><a href="/blog/2019/04/20/soft_exam/">中级软件设计师 备考笔记（持续更新）</a></p>
  <p><span>文章作者:</span><a href="/" title="访问 小东 的个人博客">小东</a></p>
  <p><span>发布时间:</span>2019年04月20日 - 00:04</p>
  <p><span>最后更新:</span>2019年05月13日 - 10:05</p>
  <p><span>原始链接:</span><a href="/blog/2019/04/20/soft_exam/" title="中级软件设计师 备考笔记（持续更新）">http://zwd596257180.gitee.io/2019/04/20/soft_exam/</a>
    <span class="copy-path" title="点击复制文章链接"><i class="fa fa-clipboard" data-clipboard-text="http://zwd596257180.gitee.io/2019/04/20/soft_exam/" aria-label="复制成功！"></i></span>
  </p>
  <p><span>许可协议:</span><i class="fa fa-creative-commons"></i> 转载请保留原文链接及作者。</p>  
</div>
<script> 
    var clipboard = new Clipboard('.fa-clipboard');
    $(".fa-clipboard").click(function(){
      clipboard.on('success', function(){
        swal({   
          title: "",   
          text: '复制成功',
          icon: "success", 
          showConfirmButton: true
          });
    });
    });  
</script>

      
    </div>

    
      <div id="wechat_subscriber" style="display: block; padding: 10px 0; margin: 20px auto; width: 100%; text-align: center;">
  <img id="wechat_subscriber_qcode" src="/blog/uploads/wechat-qcode.jpg" alt="小东 wechat" style="width: 200px; max-width: 100%;">
  <div>欢迎您扫一扫上面的微信公众号，订阅我的博客！</div>
</div>

    

    
      
    
    
      <div>
        <div id="reward-container">
  <div></div>
  <button id="reward-button" disable="enable" onclick="var qr = document.getElementById(&quot;qr&quot;); qr.style.display = (qr.style.display === 'none') ? 'block' : 'none';">
    打赏
  </button>
  <div id="qr" style="display: none;">

    
      
      
        
      
      <div style="display: inline-block">
        <img src="/blog/uploads/wechat-reword-image.png" alt="小东 微信支付">
        <p>微信支付</p>
      </div>
    
      
      
        
      
      <div style="display: inline-block">
        <img src="/blog/uploads/alipay-reword-image.png" alt="小东 支付宝">
        <p>支付宝</p>
      </div>
    

  </div>
</div>

      </div>
    

    

    <footer class="post-footer">
      
        <div class="post-tags">
          
            <a href="/blog/tags/软件设计师/" rel="tag"><i class="fa fa-tag"></i> 软件设计师</a>
          
        </div>
      

      
      
        <div class="post-widgets">
        

        

        
          
          <div class="social_share">
            
            
            
              <div>
                
  <div class="bdsharebuttonbox">
    <a href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博"></a>
    <a href="#" class="bds_douban" data-cmd="douban" title="分享到豆瓣网"></a>
    <a href="#" class="bds_sqq" data-cmd="sqq" title="分享到QQ好友"></a>
    <a href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间"></a>
    <a href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信"></a>
    <a href="#" class="bds_tieba" data-cmd="tieba" title="分享到百度贴吧"></a>
    <a href="#" class="bds_twi" data-cmd="twi" title="分享到Twitter"></a>
    <a href="#" class="bds_fbook" data-cmd="fbook" title="分享到Facebook"></a>
    <a href="#" class="bds_more" data-cmd="more"></a>
    <a class="bds_count" data-cmd="count"></a>
  </div>
  <script>
    window._bd_share_config = {
      "common": {
        "bdText": "",
        "bdMini": "2",
        "bdMiniList": false,
        "bdPic": ""
      },
      "share": {
        "bdSize": "16",
        "bdStyle": "0"
      },
      "image": {
        "viewList": ["tsina", "douban", "sqq", "qzone", "weixin", "twi", "fbook"],
        "viewText": "分享到：",
        "viewSize": "16"
      }
    }
  </script>

<script>
  with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='//bdimg.share.baidu.com/static/api/js/share.js?cdnversion='+~(-new Date()/36e5)];
</script>

              </div>
            
          </div>
        
        </div>
      
      

      
        <div class="post-nav">
          <div class="post-nav-next post-nav-item">
            
              <a href="/blog/2019/04/17/eclipse_slow/" rel="next" title="Eclipse 解决启动慢、运行慢的方法总结">
                <i class="fa fa-chevron-left"></i> Eclipse 解决启动慢、运行慢的方法总结
              </a>
            
          </div>

          <span class="post-nav-divider"></span>

          <div class="post-nav-prev post-nav-item">
            
              <a href="/blog/2019/04/23/wechat_custom_model/" rel="prev" title="微信小程序 自定义模态框">
                微信小程序 自定义模态框 <i class="fa fa-chevron-right"></i>
              </a>
            
          </div>
        </div>
      

      
      
    </footer>
  </div>
  
  
  
  </article>


  </div>


          </div>
          

  
    <div class="comments" id="comments">
      <div id="lv-container" data-id="city" data-uid="MTAyMC80Mzc0MC8yMDI3OQ=="></div>
    </div>

  



        </div>
        
          
  
  <div class="sidebar-toggle">
    <div class="sidebar-toggle-line-wrap">
      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
    </div>
  </div>

  <aside id="sidebar" class="sidebar">
    <div class="sidebar-inner">

      

      
        <ul class="sidebar-nav motion-element">
          <li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap">
            文章目录
          </li>
          <li class="sidebar-nav-overview" data-target="site-overview-wrap">
            站点概览
          </li>
        </ul>
      

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-overview">
          <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
            
              <img class="site-author-image" itemprop="image" src="https://wx.qlogo.cn/mmopen/vi_32/GqPMLROFPOIvfCs85HKcD1UKwt3zEJOK4yIcJKaSz4lFGTaL8EzBmziczWx9oWbHyAIBcjwAMXviayrzkpYmzzvg/132" alt="小东">
            
              <p class="site-author-name" itemprop="name">小东</p>
              <div class="site-description motion-element" itemprop="description">欢迎您的到来！</div>
          </div>

          <iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=1325905146&auto=0&height=66"></iframe>

          
            <nav class="site-state motion-element">
              
                <div class="site-state-item site-state-posts">
                
                  <a href="/blog/archives/">
                
                    <span class="site-state-item-count">10</span>
                    <span class="site-state-item-name">日志</span>
                  </a>
                </div>
              

              
                
                
                <div class="site-state-item site-state-categories">
                  
                    
                      <a href="/blog/categories/">
                    
                  
                    
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                    <span class="site-state-item-count">9</span>
                    <span class="site-state-item-name">分类</span>
                  </a>
                </div>
              

              
                
                
                <div class="site-state-item site-state-tags">
                  
                    
                      <a href="/blog/tags/">
                    
                  
                    
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                    <span class="site-state-item-count">14</span>
                    <span class="site-state-item-name">标签</span>
                  </a>
                </div>
              
            </nav>
          

          
            <div class="feed-link motion-element">
              <a href="/blog/atom.xml" rel="alternate">
                <i class="fa fa-rss"></i>
                RSS
              </a>
            </div>
          

          

          
            <div class="links-of-author motion-element">
              
                <span class="links-of-author-item">
                  
                  
                    
                  
                  
                    
                  
                  <a href="https://github.com/yyzheng1729" title="GitHub &rarr; https://github.com/yyzheng1729" rel="noopener" target="_blank"><i class="fa fa-fw fa-github"></i>GitHub</a>
                </span>
              
                <span class="links-of-author-item">
                  
                  
                    
                  
                  
                    
                  
                  <a href="https://blog.csdn.net/weidong_y" title="CSDN &rarr; https://blog.csdn.net/weidong_y" rel="noopener" target="_blank"><i class="fa fa-fw fa-book"></i>CSDN</a>
                </span>
              
                <span class="links-of-author-item">
                  
                  
                    
                  
                  
                    
                  
                  <a href="http://wpa.qq.com/msgrd?v=3&uin=596257180&site=qq&menu=yes" title="QQ &rarr; http://wpa.qq.com/msgrd?v=3&uin=596257180&site=qq&menu=yes" rel="noopener" target="_blank"><i class="fa fa-fw fa-qq"></i>QQ</a>
                </span>
              
                <span class="links-of-author-item">
                  
                  
                    
                  
                  
                    
                  
                  <a href="/blog/596257180@qq.com" title="E-Mail &rarr; 596257180@qq.com"><i class="fa fa-fw fa-envelope"></i>E-Mail</a>
                </span>
              
            </div>
          

          

          
          
            <div class="links-of-blogroll motion-element links-of-blogroll-block">
              <div class="links-of-blogroll-title">
                <i class="fa  fa-fw fa-link"></i>
                友情链接
              </div>
              <ul class="links-of-blogroll-list">
                
                  <li class="links-of-blogroll-item">
                    <a href="https://www.baidu.com/" title="https://www.baidu.com/" rel="noopener" target="_blank">百度</a>
                  </li>
                
                  <li class="links-of-blogroll-item">
                    <a href="https://www.iqiyi.com/" title="https://www.iqiyi.com/" rel="noopener" target="_blank">爱奇艺</a>
                  </li>
                
              </ul>
            </div>
          

          
            
          
          

        </div>
      </div>

      
      <!--noindex-->
        <div class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
          <div class="post-toc">

            
            
            
            

            
              <div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#数据结构与算法基础"><span class="nav-number">1.</span> <span class="nav-text">数据结构与算法基础</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#线性表"><span class="nav-number">1.1.</span> <span class="nav-text">线性表</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#基本数据结构"><span class="nav-number">1.1.1.</span> <span class="nav-text">基本数据结构</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#顺序表"><span class="nav-number">1.1.2.</span> <span class="nav-text">顺序表</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#链表"><span class="nav-number">1.1.3.</span> <span class="nav-text">链表</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#链表的分类"><span class="nav-number">1.1.4.</span> <span class="nav-text">链表的分类</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#单链表"><span class="nav-number">1.1.4.1.</span> <span class="nav-text">单链表</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#循环链表"><span class="nav-number">1.1.4.2.</span> <span class="nav-text">循环链表</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#双链表"><span class="nav-number">1.1.4.3.</span> <span class="nav-text">双链表</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#链表的操作"><span class="nav-number">1.1.5.</span> <span class="nav-text">链表的操作</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#单链表的结点删除"><span class="nav-number">1.1.5.1.</span> <span class="nav-text">单链表的结点删除</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#单链表的结点插入"><span class="nav-number">1.1.5.2.</span> <span class="nav-text">单链表的结点插入</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#顺序表与链表的比较"><span class="nav-number">1.1.6.</span> <span class="nav-text">顺序表与链表的比较</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#栈"><span class="nav-number">1.1.7.</span> <span class="nav-text">栈</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#队列"><span class="nav-number">1.1.8.</span> <span class="nav-text">队列</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#线性队列"><span class="nav-number">1.1.8.1.</span> <span class="nav-text">线性队列</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#循环队列"><span class="nav-number">1.1.8.2.</span> <span class="nav-text">循环队列</span></a></li></ol></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#树和二叉树"><span class="nav-number">1.2.</span> <span class="nav-text">树和二叉树</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#树的一些基本概念"><span class="nav-number">1.2.1.</span> <span class="nav-text">树的一些基本概念</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#树的遍历"><span class="nav-number">1.2.2.</span> <span class="nav-text">树的遍历</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#前序遍历"><span class="nav-number">1.2.2.1.</span> <span class="nav-text">前序遍历</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#后序遍历"><span class="nav-number">1.2.2.2.</span> <span class="nav-text">后序遍历</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#层次遍历"><span class="nav-number">1.2.2.3.</span> <span class="nav-text">层次遍历</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#二叉树"><span class="nav-number">1.2.3.</span> <span class="nav-text">二叉树</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#二叉树的遍历"><span class="nav-number">1.2.4.</span> <span class="nav-text">二叉树的遍历</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#前序遍历-1"><span class="nav-number">1.2.4.1.</span> <span class="nav-text">前序遍历</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#中序遍历"><span class="nav-number">1.2.4.2.</span> <span class="nav-text">中序遍历</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#后序遍历-1"><span class="nav-number">1.2.4.3.</span> <span class="nav-text">后序遍历</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#树与二叉树的转换"><span class="nav-number">1.2.5.</span> <span class="nav-text">树与二叉树的转换</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#二叉排序树"><span class="nav-number">1.2.6.</span> <span class="nav-text">二叉排序树</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#最优二叉树（哈弗曼树）"><span class="nav-number">1.2.7.</span> <span class="nav-text">最优二叉树（哈弗曼树）</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#平衡二叉树"><span class="nav-number">1.2.8.</span> <span class="nav-text">平衡二叉树</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#基本概念"><span class="nav-number">1.2.8.1.</span> <span class="nav-text">基本概念</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#平衡树的建立"><span class="nav-number">1.2.8.2.</span> <span class="nav-text">平衡树的建立</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#平衡树调整"><span class="nav-number">1.2.9.</span> <span class="nav-text">平衡树调整</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#LL-型平衡旋转（单向右旋平衡处理）"><span class="nav-number">1.2.9.1.</span> <span class="nav-text">LL 型平衡旋转（单向右旋平衡处理）</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#RR-型平衡旋转（单向左旋平衡处理）"><span class="nav-number">1.2.9.2.</span> <span class="nav-text">RR 型平衡旋转（单向左旋平衡处理）</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#LR-型平衡旋转（双向旋转，先左后右）"><span class="nav-number">1.2.9.3.</span> <span class="nav-text">LR 型平衡旋转（双向旋转，先左后右）</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#RL-型平衡旋转（双向旋转，先右后左）"><span class="nav-number">1.2.9.4.</span> <span class="nav-text">RL 型平衡旋转（双向旋转，先右后左）</span></a></li></ol></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#图"><span class="nav-number">1.3.</span> <span class="nav-text">图</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#图的构成"><span class="nav-number">1.3.1.</span> <span class="nav-text">图的构成</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#无向图与有向图"><span class="nav-number">1.3.2.</span> <span class="nav-text">无向图与有向图</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#顶点的度（degree）"><span class="nav-number">1.3.3.</span> <span class="nav-text">顶点的度（degree）</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#子图"><span class="nav-number">1.3.4.</span> <span class="nav-text">子图</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#完全图"><span class="nav-number">1.3.5.</span> <span class="nav-text">完全图</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#路径和回路"><span class="nav-number">1.3.6.</span> <span class="nav-text">路径和回路</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#连通图和连通分量"><span class="nav-number">1.3.7.</span> <span class="nav-text">连通图和连通分量</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#邻接矩阵"><span class="nav-number">1.3.8.</span> <span class="nav-text">邻接矩阵</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#图的遍历"><span class="nav-number">1.3.9.</span> <span class="nav-text">图的遍历</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#图的最小生成树"><span class="nav-number">1.3.10.</span> <span class="nav-text">图的最小生成树</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#普里姆算法（Prim-算法）"><span class="nav-number">1.3.10.1.</span> <span class="nav-text">普里姆算法（Prim 算法）</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#克鲁斯卡算法"><span class="nav-number">1.3.10.2.</span> <span class="nav-text">克鲁斯卡算法</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#拓扑排序"><span class="nav-number">1.3.11.</span> <span class="nav-text">拓扑排序</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#AOV-网络"><span class="nav-number">1.3.11.1.</span> <span class="nav-text">AOV 网络</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#拓扑顺序"><span class="nav-number">1.3.11.2.</span> <span class="nav-text">拓扑顺序</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#关键路径"><span class="nav-number">1.3.12.</span> <span class="nav-text">关键路径</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#AOE-网络"><span class="nav-number">1.3.12.1.</span> <span class="nav-text">AOE 网络</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#关键路径的几个重要概念"><span class="nav-number">1.3.12.2.</span> <span class="nav-text">关键路径的几个重要概念</span></a></li></ol></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#排序算法"><span class="nav-number">1.4.</span> <span class="nav-text">排序算法</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#哈希算法（Hash"><span class="nav-number">1.5.</span> <span class="nav-text">哈希算法（Hash)</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#查找算法"><span class="nav-number">1.6.</span> <span class="nav-text">查找算法</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#编译原理"><span class="nav-number">2.</span> <span class="nav-text">编译原理</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#文法"><span class="nav-number">2.1.</span> <span class="nav-text">文法</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#终结符与非终结符"><span class="nav-number">2.1.1.</span> <span class="nav-text">终结符与非终结符</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#文法的类型"><span class="nav-number">2.1.2.</span> <span class="nav-text">文法的类型</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#0-型文法"><span class="nav-number">2.1.2.1.</span> <span class="nav-text">0 型文法</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#1-型文法"><span class="nav-number">2.1.2.2.</span> <span class="nav-text">1 型文法</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#2-型文法"><span class="nav-number">2.1.2.3.</span> <span class="nav-text">2 型文法</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#3-型文法"><span class="nav-number">2.1.2.4.</span> <span class="nav-text">3 型文法</span></a></li></ol></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#正规式（正则表达式）"><span class="nav-number">2.2.</span> <span class="nav-text">正规式（正则表达式）</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#有限自动机（有穷自动机）"><span class="nav-number">2.3.</span> <span class="nav-text">有限自动机（有穷自动机）</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#确定的有限自动机（DFA）"><span class="nav-number">2.3.1.</span> <span class="nav-text">确定的有限自动机（DFA）</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#不确定的有限自动机（NFA）"><span class="nav-number">2.3.2.</span> <span class="nav-text">不确定的有限自动机（NFA）</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#正规式与有限自动机之间的转换"><span class="nav-number">2.3.3.</span> <span class="nav-text">正规式与有限自动机之间的转换</span></a></li></ol></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#操作系统"><span class="nav-number">3.</span> <span class="nav-text">操作系统</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#进程"><span class="nav-number">3.1.</span> <span class="nav-text">进程</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#进程的三态图"><span class="nav-number">3.1.1.</span> <span class="nav-text">进程的三态图</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#进程的五态图（了解）"><span class="nav-number">3.1.2.</span> <span class="nav-text">进程的五态图（了解）</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#进程的死锁"><span class="nav-number">3.1.3.</span> <span class="nav-text">进程的死锁</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#前趋图"><span class="nav-number">3.1.4.</span> <span class="nav-text">前趋图</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#PV-操作"><span class="nav-number">3.1.5.</span> <span class="nav-text">PV 操作</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#管程"><span class="nav-number">3.1.6.</span> <span class="nav-text">管程</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#存储"><span class="nav-number">3.2.</span> <span class="nav-text">存储</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#实存管理"><span class="nav-number">3.2.1.</span> <span class="nav-text">实存管理</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#虚存管理"><span class="nav-number">3.2.2.</span> <span class="nav-text">虚存管理</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#页式存储组织"><span class="nav-number">3.2.2.1.</span> <span class="nav-text">页式存储组织</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#段式存储组织"><span class="nav-number">3.2.2.2.</span> <span class="nav-text">段式存储组织</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#段页式存储组织"><span class="nav-number">3.2.2.3.</span> <span class="nav-text">段页式存储组织</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#页面置换算法"><span class="nav-number">3.2.2.4.</span> <span class="nav-text">页面置换算法</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#局部性原理"><span class="nav-number">3.2.2.5.</span> <span class="nav-text">局部性原理</span></a></li></ol></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#作业管理"><span class="nav-number">3.3.</span> <span class="nav-text">作业管理</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#最短作业优先调度算法"><span class="nav-number">3.3.1.</span> <span class="nav-text">最短作业优先调度算法</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#优先数调度算法"><span class="nav-number">3.3.2.</span> <span class="nav-text">优先数调度算法</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#先来先服务调度算法"><span class="nav-number">3.3.3.</span> <span class="nav-text">先来先服务调度算法</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#时间片轮转算法"><span class="nav-number">3.3.4.</span> <span class="nav-text">时间片轮转算法</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#带权作业周转时间"><span class="nav-number">3.3.5.</span> <span class="nav-text">带权作业周转时间</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#最高响应比有线算法"><span class="nav-number">3.3.6.</span> <span class="nav-text">最高响应比有线算法</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#文件管理"><span class="nav-number">3.4.</span> <span class="nav-text">文件管理</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#Spooling技术"><span class="nav-number">3.5.</span> <span class="nav-text">Spooling技术</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#系统开发与软件工程"><span class="nav-number">4.</span> <span class="nav-text">系统开发与软件工程</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#软件开发生命周期模型"><span class="nav-number">4.1.</span> <span class="nav-text">软件开发生命周期模型</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#瀑布模型"><span class="nav-number">4.1.1.</span> <span class="nav-text">瀑布模型</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#原型法"><span class="nav-number">4.1.2.</span> <span class="nav-text">原型法</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#螺旋模型"><span class="nav-number">4.1.3.</span> <span class="nav-text">螺旋模型</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#喷泉模型"><span class="nav-number">4.1.4.</span> <span class="nav-text">喷泉模型</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#项目管理基础"><span class="nav-number">4.2.</span> <span class="nav-text">项目管理基础</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#软件项目管理的内容"><span class="nav-number">4.2.1.</span> <span class="nav-text">软件项目管理的内容</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#软件项目估算"><span class="nav-number">4.2.2.</span> <span class="nav-text">软件项目估算</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#自顶向下估算法"><span class="nav-number">4.2.2.1.</span> <span class="nav-text">自顶向下估算法</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#自底向上估算法"><span class="nav-number">4.2.2.2.</span> <span class="nav-text">自底向上估算法</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#软件规模估算"><span class="nav-number">4.2.3.</span> <span class="nav-text">软件规模估算</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#LOC-估算法"><span class="nav-number">4.2.3.1.</span> <span class="nav-text">LOC 估算法</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#FP-估算法"><span class="nav-number">4.2.3.2.</span> <span class="nav-text">FP 估算法</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#软件工作量估算"><span class="nav-number">4.2.4.</span> <span class="nav-text">软件工作量估算</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#软件成本估算"><span class="nav-number">4.2.5.</span> <span class="nav-text">软件成本估算</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#常用的估算辅助方法"><span class="nav-number">4.2.6.</span> <span class="nav-text">常用的估算辅助方法</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#软件项目组织与计划"><span class="nav-number">4.2.7.</span> <span class="nav-text">软件项目组织与计划</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#Gannt-图"><span class="nav-number">4.2.7.1.</span> <span class="nav-text">Gannt 图</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#PERT-技术和-CPM-方法"><span class="nav-number">4.2.7.2.</span> <span class="nav-text">PERT 技术和 CPM 方法</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#配置管理"><span class="nav-number">4.2.8.</span> <span class="nav-text">配置管理</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#风险管理"><span class="nav-number">4.2.9.</span> <span class="nav-text">风险管理</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#软件测试与维护"><span class="nav-number">4.3.</span> <span class="nav-text">软件测试与维护</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#数据库"><span class="nav-number">5.</span> <span class="nav-text">数据库</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#ER-模型"><span class="nav-number">5.1.</span> <span class="nav-text">ER 模型</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#基本概念-1"><span class="nav-number">5.1.1.</span> <span class="nav-text">基本概念</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#ER-模型转换成关系模式的规则"><span class="nav-number">5.1.2.</span> <span class="nav-text">ER 模型转换成关系模式的规则</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#键（码）、函数依赖及范式"><span class="nav-number">5.2.</span> <span class="nav-text">键（码）、函数依赖及范式</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#概念理解"><span class="nav-number">5.2.1.</span> <span class="nav-text">概念理解</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#函数依赖"><span class="nav-number">5.2.2.</span> <span class="nav-text">函数依赖</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#范式"><span class="nav-number">5.2.3.</span> <span class="nav-text">范式</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#无损联接分解"><span class="nav-number">5.3.</span> <span class="nav-text">无损联接分解</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#关系代数及元组演算"><span class="nav-number">5.4.</span> <span class="nav-text">关系代数及元组演算</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#关系代数的基本运算"><span class="nav-number">5.4.1.</span> <span class="nav-text">关系代数的基本运算</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#并-Union-用符号U表示"><span class="nav-number">5.4.1.1.</span> <span class="nav-text">并(Union,用符号U表示)</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#差-Difference-用符号-表示"><span class="nav-number">5.4.1.2.</span> <span class="nav-text">差(Difference,用符号-表示)</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#笛卡尔积-PRODUCT-用符号x表示"><span class="nav-number">5.4.1.3.</span> <span class="nav-text">笛卡尔积(PRODUCT,用符号x表示)</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#投影-Project-用符号π表示"><span class="nav-number">5.4.1.4.</span> <span class="nav-text">投影(Project,用符号π表示)</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#选择-Select-用符号-σ-表示"><span class="nav-number">5.4.1.5.</span> <span class="nav-text">选择(Select,用符号 σ 表示)</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#交-Intersection-用符号∩表示"><span class="nav-number">5.4.1.6.</span> <span class="nav-text">交(Intersection,用符号∩表示)</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#联接-Join，用符号⋈表示"><span class="nav-number">5.4.1.7.</span> <span class="nav-text">联接(Join，用符号⋈表示)</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#除-Division，用符号➗表示"><span class="nav-number">5.4.1.8.</span> <span class="nav-text">除(Division，用符号➗表示)</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#元组演算"><span class="nav-number">5.4.2.</span> <span class="nav-text">元组演算</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#SQL语言"><span class="nav-number">5.5.</span> <span class="nav-text">SQL语言</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#基本表的创建"><span class="nav-number">5.5.1.</span> <span class="nav-text">基本表的创建</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#基本表的修改"><span class="nav-number">5.5.2.</span> <span class="nav-text">基本表的修改</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#新增列"><span class="nav-number">5.5.2.1.</span> <span class="nav-text">新增列</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#修改数据类型"><span class="nav-number">5.5.2.2.</span> <span class="nav-text">修改数据类型</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#删除约束"><span class="nav-number">5.5.2.3.</span> <span class="nav-text">删除约束</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#基本表的撤销"><span class="nav-number">5.5.3.</span> <span class="nav-text">基本表的撤销</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#删除表"><span class="nav-number">5.5.3.1.</span> <span class="nav-text">删除表</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#视图的创建"><span class="nav-number">5.5.4.</span> <span class="nav-text">视图的创建</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#视图的删除"><span class="nav-number">5.5.5.</span> <span class="nav-text">视图的删除</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#索引的创建"><span class="nav-number">5.5.6.</span> <span class="nav-text">索引的创建</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#索引的删除"><span class="nav-number">5.5.7.</span> <span class="nav-text">索引的删除</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#数据查询"><span class="nav-number">5.5.8.</span> <span class="nav-text">数据查询</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#自定义输出列名"><span class="nav-number">5.5.8.1.</span> <span class="nav-text">自定义输出列名</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#DISTINCT（distinct）-的作用：消除重复行"><span class="nav-number">5.5.8.2.</span> <span class="nav-text">DISTINCT（distinct） 的作用：消除重复行</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#确定范围"><span class="nav-number">5.5.8.3.</span> <span class="nav-text">确定范围</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#确定集合"><span class="nav-number">5.5.8.4.</span> <span class="nav-text">确定集合</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#字符匹配（LIKE）"><span class="nav-number">5.5.8.5.</span> <span class="nav-text">字符匹配（LIKE）</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#涉及空值的查询"><span class="nav-number">5.5.8.6.</span> <span class="nav-text">涉及空值的查询</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#对查询结果排序"><span class="nav-number">5.5.8.7.</span> <span class="nav-text">对查询结果排序</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#使用集函数"><span class="nav-number">5.5.8.8.</span> <span class="nav-text">使用集函数</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#分组"><span class="nav-number">5.5.8.9.</span> <span class="nav-text">分组</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#带有-ANY-或-ALL-谓词的子查询"><span class="nav-number">5.5.8.10.</span> <span class="nav-text">带有 ANY 或 ALL 谓词的子查询</span></a></li></ol></li></ol></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#计算机组成原理与系统结构"><span class="nav-number">6.</span> <span class="nav-text">计算机组成原理与系统结构</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#流水线"><span class="nav-number">6.1.</span> <span class="nav-text">流水线</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#流水线概念"><span class="nav-number">6.1.1.</span> <span class="nav-text">流水线概念</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#流水线指令运行时间的计算"><span class="nav-number">6.1.2.</span> <span class="nav-text">流水线指令运行时间的计算</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#流水线的吞吐率"><span class="nav-number">6.1.3.</span> <span class="nav-text">流水线的吞吐率</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#流水线的加速比"><span class="nav-number">6.1.4.</span> <span class="nav-text">流水线的加速比</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#流水线的效率"><span class="nav-number">6.1.5.</span> <span class="nav-text">流水线的效率</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#高速缓冲存储器"><span class="nav-number">6.2.</span> <span class="nav-text">高速缓冲存储器</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#Cache的概念"><span class="nav-number">6.2.1.</span> <span class="nav-text">Cache的概念</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#命中率"><span class="nav-number">6.2.2.</span> <span class="nav-text">命中率</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Cache-的读写过程"><span class="nav-number">6.2.3.</span> <span class="nav-text">Cache 的读写过程</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#地址映像"><span class="nav-number">6.2.4.</span> <span class="nav-text">地址映像</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#内存编址方法"><span class="nav-number">6.3.</span> <span class="nav-text">内存编址方法</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#编址"><span class="nav-number">6.3.1.</span> <span class="nav-text">编址</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#芯片的拼接"><span class="nav-number">6.3.2.</span> <span class="nav-text">芯片的拼接</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#存储相关计算问题"><span class="nav-number">6.4.</span> <span class="nav-text">存储相关计算问题</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#数制"><span class="nav-number">6.5.</span> <span class="nav-text">数制</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#进制转换"><span class="nav-number">6.5.1.</span> <span class="nav-text">进制转换</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#定点整数：原码"><span class="nav-number">6.5.2.</span> <span class="nav-text">定点整数：原码</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#定点小数：原码"><span class="nav-number">6.5.3.</span> <span class="nav-text">定点小数：原码</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#定点整数：反码"><span class="nav-number">6.5.4.</span> <span class="nav-text">定点整数：反码</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#定点小数：反码"><span class="nav-number">6.5.5.</span> <span class="nav-text">定点小数：反码</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#定点整数：补码"><span class="nav-number">6.5.6.</span> <span class="nav-text">定点整数：补码</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#定点小数：补码"><span class="nav-number">6.5.7.</span> <span class="nav-text">定点小数：补码</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#移码"><span class="nav-number">6.5.8.</span> <span class="nav-text">移码</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#校验码"><span class="nav-number">6.6.</span> <span class="nav-text">校验码</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#循环校验码-CRC"><span class="nav-number">6.6.1.</span> <span class="nav-text">循环校验码 CRC</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#模二除法"><span class="nav-number">6.6.1.1.</span> <span class="nav-text">模二除法</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#海明校验码"><span class="nav-number">6.6.2.</span> <span class="nav-text">海明校验码</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#计算机的分类"><span class="nav-number">6.7.</span> <span class="nav-text">计算机的分类</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#Flynn-分类法"><span class="nav-number">6.7.1.</span> <span class="nav-text">Flynn 分类法</span></a></li></ol></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#网络基础"><span class="nav-number">7.</span> <span class="nav-text">网络基础</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#网络的相关基础概念"><span class="nav-number">7.1.</span> <span class="nav-text">网络的相关基础概念</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#网络的功能"><span class="nav-number">7.1.1.</span> <span class="nav-text">网络的功能</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#网络的分类"><span class="nav-number">7.1.2.</span> <span class="nav-text">网络的分类</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#网络的拓扑结构"><span class="nav-number">7.1.3.</span> <span class="nav-text">网络的拓扑结构</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#OSI-模型"><span class="nav-number">7.2.</span> <span class="nav-text">OSI 模型</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#常见设备在-OSI-模型中所处层次："><span class="nav-number">7.2.1.</span> <span class="nav-text">常见设备在 OSI 模型中所处层次：</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#OSI-中的信息流向"><span class="nav-number">7.2.2.</span> <span class="nav-text">OSI 中的信息流向</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#TCP-IP-协议族"><span class="nav-number">7.3.</span> <span class="nav-text">TCP/IP 协议族</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#常用协议"><span class="nav-number">7.3.1.</span> <span class="nav-text">常用协议</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#常用端口知识"><span class="nav-number">7.3.2.</span> <span class="nav-text">常用端口知识</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#IP-地址的分类及子网的划分"><span class="nav-number">7.4.</span> <span class="nav-text">IP 地址的分类及子网的划分</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#IP-地址的分类"><span class="nav-number">7.4.1.</span> <span class="nav-text">IP 地址的分类</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#子网掩码的概念及子网划分"><span class="nav-number">7.4.2.</span> <span class="nav-text">子网掩码的概念及子网划分</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#传输介质"><span class="nav-number">7.5.</span> <span class="nav-text">传输介质</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#常用网络应用"><span class="nav-number">7.6.</span> <span class="nav-text">常用网络应用</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#WWW——万维网"><span class="nav-number">7.6.1.</span> <span class="nav-text">WWW——万维网</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#E-Mail——电子邮件"><span class="nav-number">7.6.2.</span> <span class="nav-text">E-Mail——电子邮件</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#DNS——域名解析协议"><span class="nav-number">7.6.3.</span> <span class="nav-text">DNS——域名解析协议</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#FTP——文件传输协议"><span class="nav-number">7.6.4.</span> <span class="nav-text">FTP——文件传输协议</span></a></li></ol></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#安全性、可靠性及系统性能评价"><span class="nav-number">8.</span> <span class="nav-text">安全性、可靠性及系统性能评价</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#系统可靠性"><span class="nav-number">8.1.</span> <span class="nav-text">系统可靠性</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#数据安全与保密"><span class="nav-number">8.2.</span> <span class="nav-text">数据安全与保密</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#对称加密技术"><span class="nav-number">8.2.1.</span> <span class="nav-text">对称加密技术</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#非对称加密技术"><span class="nav-number">8.2.2.</span> <span class="nav-text">非对称加密技术</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#信息摘要"><span class="nav-number">8.3.</span> <span class="nav-text">信息摘要</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#数字签名"><span class="nav-number">8.4.</span> <span class="nav-text">数字签名</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#数字时间戳技术"><span class="nav-number">8.5.</span> <span class="nav-text">数字时间戳技术</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#SSL-安全协议"><span class="nav-number">8.6.</span> <span class="nav-text">SSL 安全协议</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#网络安全"><span class="nav-number">8.7.</span> <span class="nav-text">网络安全</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#VPN-技术"><span class="nav-number">8.7.1.</span> <span class="nav-text">VPN 技术</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#防火墙"><span class="nav-number">8.7.2.</span> <span class="nav-text">防火墙</span></a></li></ol></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#标准化"><span class="nav-number">9.</span> <span class="nav-text">标准化</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#基本概念-2"><span class="nav-number">9.1.</span> <span class="nav-text">基本概念</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#常见标准化组织"><span class="nav-number">9.2.</span> <span class="nav-text">常见标准化组织</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#我国的标准分类"><span class="nav-number">9.3.</span> <span class="nav-text">我国的标准分类</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#面向对象技术"><span class="nav-number">10.</span> <span class="nav-text">面向对象技术</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#基本概念-3"><span class="nav-number">10.1.</span> <span class="nav-text">基本概念</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#OOA-OOD"><span class="nav-number">10.2.</span> <span class="nav-text">OOA/OOD</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#Booch方法"><span class="nav-number">10.3.</span> <span class="nav-text">Booch方法</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#OMT方法"><span class="nav-number">10.4.</span> <span class="nav-text">OMT方法</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#面向对象程序设计"><span class="nav-number">10.5.</span> <span class="nav-text">面向对象程序设计</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#this-指针的使用"><span class="nav-number">10.5.1.</span> <span class="nav-text">this 指针的使用</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#继承成员访问控制机制"><span class="nav-number">10.5.2.</span> <span class="nav-text">继承成员访问控制机制</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#设计模式"><span class="nav-number">10.6.</span> <span class="nav-text">设计模式</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#设计模式的要素"><span class="nav-number">10.6.1.</span> <span class="nav-text">设计模式的要素</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#设计模式的分类"><span class="nav-number">10.6.2.</span> <span class="nav-text">设计模式的分类</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#创建型模式"><span class="nav-number">10.6.3.</span> <span class="nav-text">创建型模式</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#结构型模式"><span class="nav-number">10.6.4.</span> <span class="nav-text">结构型模式</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#行为型模式"><span class="nav-number">10.6.5.</span> <span class="nav-text">行为型模式</span></a></li></ol></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#知识产权"><span class="nav-number">11.</span> <span class="nav-text">知识产权</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#多媒体"><span class="nav-number">12.</span> <span class="nav-text">多媒体</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#媒体的分类"><span class="nav-number">12.1.</span> <span class="nav-text">媒体的分类</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#多媒体的特征"><span class="nav-number">12.2.</span> <span class="nav-text">多媒体的特征</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#虚拟现实技术"><span class="nav-number">12.3.</span> <span class="nav-text">虚拟现实技术</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#概念"><span class="nav-number">12.3.1.</span> <span class="nav-text">概念</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#分类"><span class="nav-number">12.3.2.</span> <span class="nav-text">分类</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#声音"><span class="nav-number">12.4.</span> <span class="nav-text">声音</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#声音文件格式"><span class="nav-number">12.5.</span> <span class="nav-text">声音文件格式</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#颜色"><span class="nav-number">12.6.</span> <span class="nav-text">颜色</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#颜色的三要素"><span class="nav-number">12.6.1.</span> <span class="nav-text">颜色的三要素</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#三基色"><span class="nav-number">12.6.2.</span> <span class="nav-text">三基色</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#颜色模型"><span class="nav-number">12.6.3.</span> <span class="nav-text">颜色模型</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#图形和图像"><span class="nav-number">12.7.</span> <span class="nav-text">图形和图像</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#概念-1"><span class="nav-number">12.7.1.</span> <span class="nav-text">概念</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#图像的属性"><span class="nav-number">12.7.2.</span> <span class="nav-text">图像的属性</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#分辨率"><span class="nav-number">12.7.2.1.</span> <span class="nav-text">分辨率</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#像素深度"><span class="nav-number">12.7.2.2.</span> <span class="nav-text">像素深度</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#真彩色和伪彩色"><span class="nav-number">12.7.3.</span> <span class="nav-text">真彩色和伪彩色</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#图像的压缩编码"><span class="nav-number">12.7.4.</span> <span class="nav-text">图像的压缩编码</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#图像文件格式"><span class="nav-number">12.7.5.</span> <span class="nav-text">图像文件格式</span></a></li></ol></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#数据流图设计"><span class="nav-number">13.</span> <span class="nav-text">数据流图设计</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#百度资源"><span class="nav-number">14.</span> <span class="nav-text">百度资源</span></a></li></ol></div>
            

          </div>
        </div>
      <!--/noindex-->
      

      

    </div>
  </aside>
  



        
      </div>
    </main>

    <footer id="footer" class="footer">
      <div class="footer-inner">
        <div class="copyright">&copy; <span itemprop="copyrightYear">2019</span>
  <span class="with-love" id="animate">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">小东</span>

  

  
</div>

<!-- 用下面的符号注释，注释代码用下面括号括起来 -->
<!-- -->

<!-- 

  <div class="powered-by">由 <a href="https://hexo.io" class="theme-link" rel="noopener" target="_blank">Hexo</a> 强力驱动 v3.8.0</div>



  <span class="post-meta-divider">|</span>



  <div class="theme-info">主题 – <a href="https://theme-next.org" class="theme-link" rel="noopener" target="_blank">NexT.Gemini</a> v7.1.0</div>



-->

<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>

<div class="powered-by">
  <i class="fa fa-user-md"></i>
  <span id="busuanzi_container_site_pv">
    本站访问量:<span id="busuanzi_value_site_pv"></span>次
  </span>
  <span class="post-meta-divider">|</span>
  <span id="busuanzi_container_site_uv">
    本站总访客量：<span id="busuanzi_value_site_uv"></span>人
  </span>
</div>

<span class="post-meta-divider">|</span>

<div class="theme-info">
  <div class="powered-by"></div>
  <span class="post-count">博客全站共34.4k字</span>
</div>

        








        
      </div>
    </footer>

    
      <div class="back-to-top">
        <i class="fa fa-arrow-up"></i>
        
      </div>
    

    

    

    
  </div>

  

<script>
  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
    window.Promise = null;
  }
</script>


























  
  <script src="/blog/lib/jquery/index.js?v=2.1.3"></script>

  
  <script src="/blog/lib/velocity/velocity.min.js?v=1.2.1"></script>

  
  <script src="/blog/lib/velocity/velocity.ui.min.js?v=1.2.1"></script>


  


  <script src="/blog/js/utils.js?v=7.1.0"></script>

  <script src="/blog/js/motion.js?v=7.1.0"></script>



  
  


  <script src="/blog/js/affix.js?v=7.1.0"></script>

  <script src="/blog/js/schemes/pisces.js?v=7.1.0"></script>




  
  <script src="/blog/js/scrollspy.js?v=7.1.0"></script>
<script src="/blog/js/post-details.js?v=7.1.0"></script>



  


  <script src="/blog/js/next-boot.js?v=7.1.0"></script>


  

  

  

  


  
    <script>
  window.livereOptions = {
    refer: '2019/04/20/soft_exam/'
  };
  (function(d, s) {
    var j, e = d.getElementsByTagName(s)[0];
    if (typeof LivereTower === 'function') { return; }
    j = d.createElement(s);
    j.src = 'https://cdn-city.livere.com/js/embed.dist.js';
    j.async = true;
    e.parentNode.insertBefore(j, e);
  })(document, 'script');
</script>

  


  
  <script>
    // Popup Window;
    var isfetched = false;
    var isXml = true;
    // Search DB path;
    var search_path = "search.xml";
    if (search_path.length === 0) {
      search_path = "search.xml";
    } else if (/json$/i.test(search_path)) {
      isXml = false;
    }
    var path = "/blog/" + search_path;
    // monitor main search box;

    var onPopupClose = function (e) {
      $('.popup').hide();
      $('#local-search-input').val('');
      $('.search-result-list').remove();
      $('#no-result').remove();
      $(".local-search-pop-overlay").remove();
      $('body').css('overflow', '');
    }

    function proceedsearch() {
      $("body")
        .append('<div class="search-popup-overlay local-search-pop-overlay"></div>')
        .css('overflow', 'hidden');
      $('.search-popup-overlay').click(onPopupClose);
      $('.popup').toggle();
      var $localSearchInput = $('#local-search-input');
      $localSearchInput.attr("autocapitalize", "none");
      $localSearchInput.attr("autocorrect", "off");
      $localSearchInput.focus();
    }

    // search function;
    var searchFunc = function(path, search_id, content_id) {
      'use strict';

      // start loading animation
      $("body")
        .append('<div class="search-popup-overlay local-search-pop-overlay">' +
          '<div id="search-loading-icon">' +
          '<i class="fa fa-spinner fa-pulse fa-5x fa-fw"></i>' +
          '</div>' +
          '</div>')
        .css('overflow', 'hidden');
      $("#search-loading-icon").css('margin', '20% auto 0 auto').css('text-align', 'center');

      

      $.ajax({
        url: path,
        dataType: isXml ? "xml" : "json",
        async: true,
        success: function(res) {
          // get the contents from search data
          isfetched = true;
          $('.popup').detach().appendTo('.header-inner');
          var datas = isXml ? $("entry", res).map(function() {
            return {
              title: $("title", this).text(),
              content: $("content",this).text(),
              url: $("url" , this).text()
            };
          }).get() : res;
          var input = document.getElementById(search_id);
          var resultContent = document.getElementById(content_id);
          var inputEventFunction = function() {
            var searchText = input.value.trim().toLowerCase();
            var keywords = searchText.split(/[\s\-]+/);
            if (keywords.length > 1) {
              keywords.push(searchText);
            }
            var resultItems = [];
            if (searchText.length > 0) {
              // perform local searching
              datas.forEach(function(data) {
                var isMatch = false;
                var hitCount = 0;
                var searchTextCount = 0;
                var title = data.title.trim();
                var titleInLowerCase = title.toLowerCase();
                var content = data.content.trim().replace(/<[^>]+>/g,"");
                
                var contentInLowerCase = content.toLowerCase();
                var articleUrl = decodeURIComponent(data.url).replace(/\/{2,}/g, '/');
                var indexOfTitle = [];
                var indexOfContent = [];
                // only match articles with not empty titles
                if(title != '') {
                  keywords.forEach(function(keyword) {
                    function getIndexByWord(word, text, caseSensitive) {
                      var wordLen = word.length;
                      if (wordLen === 0) {
                        return [];
                      }
                      var startPosition = 0, position = [], index = [];
                      if (!caseSensitive) {
                        text = text.toLowerCase();
                        word = word.toLowerCase();
                      }
                      while ((position = text.indexOf(word, startPosition)) > -1) {
                        index.push({position: position, word: word});
                        startPosition = position + wordLen;
                      }
                      return index;
                    }

                    indexOfTitle = indexOfTitle.concat(getIndexByWord(keyword, titleInLowerCase, false));
                    indexOfContent = indexOfContent.concat(getIndexByWord(keyword, contentInLowerCase, false));
                  });
                  if (indexOfTitle.length > 0 || indexOfContent.length > 0) {
                    isMatch = true;
                    hitCount = indexOfTitle.length + indexOfContent.length;
                  }
                }

                // show search results

                if (isMatch) {
                  // sort index by position of keyword

                  [indexOfTitle, indexOfContent].forEach(function (index) {
                    index.sort(function (itemLeft, itemRight) {
                      if (itemRight.position !== itemLeft.position) {
                        return itemRight.position - itemLeft.position;
                      } else {
                        return itemLeft.word.length - itemRight.word.length;
                      }
                    });
                  });

                  // merge hits into slices

                  function mergeIntoSlice(text, start, end, index) {
                    var item = index[index.length - 1];
                    var position = item.position;
                    var word = item.word;
                    var hits = [];
                    var searchTextCountInSlice = 0;
                    while (position + word.length <= end && index.length != 0) {
                      if (word === searchText) {
                        searchTextCountInSlice++;
                      }
                      hits.push({position: position, length: word.length});
                      var wordEnd = position + word.length;

                      // move to next position of hit

                      index.pop();
                      while (index.length != 0) {
                        item = index[index.length - 1];
                        position = item.position;
                        word = item.word;
                        if (wordEnd > position) {
                          index.pop();
                        } else {
                          break;
                        }
                      }
                    }
                    searchTextCount += searchTextCountInSlice;
                    return {
                      hits: hits,
                      start: start,
                      end: end,
                      searchTextCount: searchTextCountInSlice
                    };
                  }

                  var slicesOfTitle = [];
                  if (indexOfTitle.length != 0) {
                    slicesOfTitle.push(mergeIntoSlice(title, 0, title.length, indexOfTitle));
                  }

                  var slicesOfContent = [];
                  while (indexOfContent.length != 0) {
                    var item = indexOfContent[indexOfContent.length - 1];
                    var position = item.position;
                    var word = item.word;
                    // cut out 100 characters
                    var start = position - 20;
                    var end = position + 80;
                    if(start < 0){
                      start = 0;
                    }
                    if (end < position + word.length) {
                      end = position + word.length;
                    }
                    if(end > content.length){
                      end = content.length;
                    }
                    slicesOfContent.push(mergeIntoSlice(content, start, end, indexOfContent));
                  }

                  // sort slices in content by search text's count and hits' count

                  slicesOfContent.sort(function (sliceLeft, sliceRight) {
                    if (sliceLeft.searchTextCount !== sliceRight.searchTextCount) {
                      return sliceRight.searchTextCount - sliceLeft.searchTextCount;
                    } else if (sliceLeft.hits.length !== sliceRight.hits.length) {
                      return sliceRight.hits.length - sliceLeft.hits.length;
                    } else {
                      return sliceLeft.start - sliceRight.start;
                    }
                  });

                  // select top N slices in content

                  var upperBound = parseInt('1');
                  if (upperBound >= 0) {
                    slicesOfContent = slicesOfContent.slice(0, upperBound);
                  }

                  // highlight title and content

                  function highlightKeyword(text, slice) {
                    var result = '';
                    var prevEnd = slice.start;
                    slice.hits.forEach(function (hit) {
                      result += text.substring(prevEnd, hit.position);
                      var end = hit.position + hit.length;
                      result += '<b class="search-keyword">' + text.substring(hit.position, end) + '</b>';
                      prevEnd = end;
                    });
                    result += text.substring(prevEnd, slice.end);
                    return result;
                  }

                  var resultItem = '';

                  if (slicesOfTitle.length != 0) {
                    resultItem += "<li><a href='" + articleUrl + "' class='search-result-title'>" + highlightKeyword(title, slicesOfTitle[0]) + "</a>";
                  } else {
                    resultItem += "<li><a href='" + articleUrl + "' class='search-result-title'>" + title + "</a>";
                  }

                  slicesOfContent.forEach(function (slice) {
                    resultItem += "<a href='" + articleUrl + "'>" +
                      "<p class=\"search-result\">" + highlightKeyword(content, slice) +
                      "...</p>" + "</a>";
                  });

                  resultItem += "</li>";
                  resultItems.push({
                    item: resultItem,
                    searchTextCount: searchTextCount,
                    hitCount: hitCount,
                    id: resultItems.length
                  });
                }
              })
            };
            if (keywords.length === 1 && keywords[0] === "") {
              resultContent.innerHTML = '<div id="no-result"><i class="fa fa-search fa-5x"></i></div>'
            } else if (resultItems.length === 0) {
              resultContent.innerHTML = '<div id="no-result"><i class="fa fa-frown-o fa-5x"></i></div>'
            } else {
              resultItems.sort(function (resultLeft, resultRight) {
                if (resultLeft.searchTextCount !== resultRight.searchTextCount) {
                  return resultRight.searchTextCount - resultLeft.searchTextCount;
                } else if (resultLeft.hitCount !== resultRight.hitCount) {
                  return resultRight.hitCount - resultLeft.hitCount;
                } else {
                  return resultRight.id - resultLeft.id;
                }
              });
              var searchResultList = '<ul class=\"search-result-list\">';
              resultItems.forEach(function (result) {
                searchResultList += result.item;
              })
              searchResultList += "</ul>";
              resultContent.innerHTML = searchResultList;
            }
          }

          if ('auto' === 'auto') {
            input.addEventListener('input', inputEventFunction);
          } else {
            $('.search-icon').click(inputEventFunction);
            input.addEventListener('keypress', function (event) {
              if (event.keyCode === 13) {
                inputEventFunction();
              }
            });
          }

          // remove loading animation
          $(".local-search-pop-overlay").remove();
          $('body').css('overflow', '');

          proceedsearch();
        }
      });
    }

    // handle and trigger popup window;
    $('.popup-trigger').click(function(e) {
      e.stopPropagation();
      if (isfetched === false) {
        searchFunc(path, 'local-search-input', 'local-search-result');
      } else {
        proceedsearch();
      };
    });

    $('.popup-btn-close').click(onPopupClose);
    $('.popup').click(function(e){
      e.stopPropagation();
    });
    $(document).on('keyup', function (event) {
      var shouldDismissSearchPopup = event.which === 27 &&
        $('.search-popup').is(':visible');
      if (shouldDismissSearchPopup) {
        onPopupClose();
      }
    });
  </script>





  

  

  

  

  

  

  

  

  

  

  

  

  

  

</body>
</html>

<!-- 动态背景 -->
<script type="text/javascript" src="//cdn.bootcss.com/canvas-nest.js/1.0.0/canvas-nest.min.js"></script>

<!-- 页面点击小红心 -->
<script type="text/javascript" src="/js/src/clicklove.js"></script>
